通常,對於我的模板化類,我將.hpp
文件中的聲明和.t.hpp
文件中的模板實現代碼包含在內。我明確實例在.cpp
文件中的類:模板化操作符<<顯式實例化和頭文件
template class MyClass<AnotherClass>;
,其對象代碼被放在一個庫。
的問題是,如果我嘗試打印與operator<<
的對象,這是在.hpp
文件中聲明,並在.t.hpp
文件中定義爲:
template<class T>
std::ostream& operator<<(std::ostream& os, const MyClass<T>& c)
{
os << "Hello, I am being output.";
return os;
}
我得到一個鏈接錯誤,指出正確的符號未定義。
據我所知,這是因爲這個模板函數沒有顯式實例化時,類是。有沒有辦法繞過這個,而不是在任何時候想要在課上使用operator<<
或將模板化功能代碼移動到.hpp
文件中時包含.t.hpp
文件?我可以顯式實例化函數代碼嗎?
+1。我只是添加了非推斷的案例,看到你已經更新,包括... Grr! :) – 2009-06-18 17:30:03
謝謝!這正是我所需要的。我沒有意識到模板化函數可以被明確實例化。 – 2009-06-18 23:32:35