私はクラスVector<T>
を持ち、クラスYAML::Node
を提供するライブラリを使用しています。私はこれら2つのタイプのためにoperator>>
をオーバーロードしたいと思います。operator >> overloadの明示的なインスタンス化
私は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
ありがとうございました。 –