- ベストアンサー
c++におけるtemplateについて
c++の自作templateを関数宣言部と関数定義部とで、ファイルを分割する事を考えているのですが、エラーが出てtemplateをincludeすることが出来ないでいます。 例えば、 <ファイル:test.H> #ifndef test_H #define test_H #include <iostream> template<class T> class test { private: int row_, col_; public: test( int , int ); }; #endif <ファイル test.C> #include "test.H" template<class T> test<T>::test(int a, int b) :row_(a), col_(b) { std::cout << "コンストラクター" << std::endl; } <ファイル main.C> #include "test.H" #include<iostream> int main() { test a( 3, 3) return 0; } のようにtemplateファイルを分割した場合、 undefined reference to `test<double>::test(int, int)' collect2: ld returned 1 exit status のようなエラーがでます。 書籍:新c++言語入門・シニア編(下)の29章には「export」を関数定義部に付ければ良いような記述がありましたが、エラーを解決することが出来ませんでした。 main.Cにて、test.Cをインクルードするとこの問題を回避することが出来るのですが・・・。 そもそもtemplateは上記のように宣言部と定義部とを別々のファイルにすることはできないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
今の時点で export をサポートしているコンパイラなんて, ほとんど存在しないんじゃないかなぁ. 少なくとも gcc はサポートしていないはず. 昔, つまり今の GCC が EGCS と呼ばれていた時代には, 「特定の template をインスタンス化するソースファイル」を吐くようにリンカを改造するという方針で処理した例がありました.
その他の回答 (1)
- aris-wiz
- ベストアンサー率38% (96/252)
そもそもtemplateにしたいのは関数ですか?クラスですか? 質問は関数のように聞こえますが、サンプルはクラスだし。。。 質問から何がやりたいのか、 いまいち読み取れないのでもう一度自分がやりたいことを 整理してみては?
補足
コメントをいただき、ありがとうございます。 クラスをtemplateにしたいと考えています。よろしくおねがいします。
お礼
exportはをサポートしたコンパイラは殆ど存在しないんですね。ご回答いただき、ありがとうございました。