クラステンプレートを使ってみたかったのだけど、

こんなんでよいだろうって、クラステンプレートのサンプルプログラムをつくってみた。


template< class T >
class A {
public:
A();
};


#include "A.hh"
template< class T >
A< T >::T(){
}

で、メインからヘッダーインクルードして、コンパイルするわけなんだけど、実行ファイルを作るところでこけるわけね。たとえば

#include "A.hh"

int main(){
A< int > a;
return 0;
};


なんてしても。リンカがA< int >::A()なんて知りません、ってぬかすんだわ。gccinfo読んでなんとなくわかったけど、テンプレートの段階は宣言と実装の間のようなものなんだね。オブジェクトファイルはできているけど、実際に使われるクラスの種類がわからないと、そりゃ困るのでしょう。

解決はテンプレートを使っているものはヘッダの中に実装までいれておくか、下のほうにでも#include "A.cc"っていれておくのだそうだ。たしかにクラス定義の中に{}をいれたらちゃんとコンパイルできたね。