クラステンプレートを使ってみたかったのだけど、
こんなんでよいだろうって、クラステンプレートのサンプルプログラムをつくってみた。
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()なんて知りません、ってぬかすんだわ。gccのinfo読んでなんとなくわかったけど、テンプレートの段階は宣言と実装の間のようなものなんだね。オブジェクトファイルはできているけど、実際に使われるクラスの種類がわからないと、そりゃ困るのでしょう。
解決はテンプレートを使っているものはヘッダの中に実装までいれておくか、下のほうにでも#include "A.cc"っていれておくのだそうだ。たしかにクラス定義の中に{}をいれたらちゃんとコンパイルできたね。