通常、テンプレート化されたクラスでは、.hpp
ファイルとテンプレート化された実装コードの宣言を.t.hpp
ファイルに含めます。そのオブジェクトコードのライブラリに入れますテンプレート演算子<<明示的なインスタンス化とヘッダー
template class MyClass<AnotherClass>;
:私は明示的.cpp
ファイル内のクラスをインスタンス化します。
template<class T>
std::ostream& operator<<(std::ostream& os, const MyClass<T>& c)
{
os << "Hello, I am being output.";
return os;
}
私は右のシンボルと言っリンカエラーを取得:
問題は、私は.hpp
ファイルで宣言として.t.hpp
ファイルで定義されている、operator<<
でオブジェクトを印刷しようとするということです定義されていません。
これは、このテンプレート化された関数が、クラスが次のときに明示的にインスタンス化されていないためです。クラスにoperator<<
を使用する場合、またはテンプレート化された関数コードを.hpp
ファイルに移動する場合はいつでも、.t.hpp
ファイルを含める以外の方法がありますか?関数コードを明示的にインスタンス化できますか?
+1。私はちょうど推論されていないケースを追加して、あなたがすでにそれを含むように更新したのを見て... Grr! :) –
ありがとう!これは私が必要としたものです。テンプレート化された関数を明示的にインスタンス化することはできませんでした。 –