我有一個類Vector<T>
,我正在使用提供類YAML::Node
的類。我想爲這兩種類型重載operator>>
。操作符>>過載的明確實例化
我加入了以下聲明Vector
的聲明:
friend void operator>>(YAML::Node const & node, Vector<T> & v);
我還增加了以下實現功能:
template<typename T>
void operator>>(YAML::Node const & node, Vector<T> & v) {
node[0] >> v.x;
node[1] >> v.y;
node[2] >> v.z;
}
最後,我添加了以下(未遂at)明確實例化模板T = num_t
:
template
void operator>>(YAML::Node const & node, Vector<num_t> & v);
然而,這會導致下面的鏈接錯誤:
Error 9 error LNK2019: unresolved external symbol "void __cdecl operator>>(class YAML::Node const &,class Vector<double> &)" ([email protected]@[email protected]@[email protected]@@@Z) referenced in function "public: static class Scene __cdecl Scene::fromFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" ([email protected]@@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z)
(num_t
是double
一個typedef)
但是,如果我添加以下(非模板)實現的功能,一切編譯罰款:
void operator>>(YAML::Node const & node, Vector<num_t> & v) {
node[0] >> v.x;
node[1] >> v.y;
node[2] >> v.z;
}
爲什麼模板版本的功能不能正常工作?
編輯:忘記提及;編譯器是Visual Studio 11 Beta
謝謝,現在有道理! – 2012-03-08 01:27:54