У меня есть класс 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;
}
Наконец, я добавил следующую (попытку) явной реализации шаблона для 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> &)" (??5@YAXAEBVNode@YAML@@AEAV?$Vector@N@@@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> >)" (?fromFile@Scene@@SA?AV1@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
(num_t
- это typedef для double
)
Однако, если я добавлю следующую (не шаблонную) реализацию функции, все прекрасно скомпилируется:1024 *
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