2004년 5월 21일 금요일

C++ template 사용하기

C++ template는 source파일에 주면 link가 안되는 경우도 있다.
이 때는 header 파일에 적도록 한다.

예제)
$ cat b.h
#include <iostream>

template <typename T>
void b(T val);

$ cat b.cpp
#include "b.h"

template <typename T>
void b(T val)
{
    cout << val << endl;
}

$ cat a.cpp
#include "b.h"
#include <iostream>

int main()
{
    b(10);

    return 0;
}

컴파일 결과)
g++ -g -Wall a.cpp b.cpp
/tmp/ccc56fWm.o(.text+0x16): In function `main':
/svc/neo/work/template_test/a.cpp:6: undefined reference to `void b<int>(int)'
collect2: ld returned 1 exit status
make: *** [all] 오류 1

이 때 b.cpp의 내용을 전부 b.h로 옮겨주면 정상적으로 컴파일 된다.
GNU STL(standard template library)도 대부분의 template이 header file에 들어가 있다.
(/usr/include/g++3/ 파일들을 보라.)
컴파일러에 따라 link과정에서 template을 제대로 인식하지 못하는 경우가 있다.

댓글 없음:

댓글 쓰기