1)在CPP源文件中的模板化类中实现方法:
// foo.hpp
template<typename T>
class foo
{
public:
void bar(const T &t);
};
// Foo.cpp中
template <class T>
void foo<T>::bar(const T &t)
{
std::cout << "General." << std::endl;
}
template class foo<int>;
//主
foo<int> foo;
foo.bar(42);
2)从CPP源文件中的类实现模板化方法:
// foo.hpp
class foo
{
public:
template<typename T>
void bar(const T &t);
};
// Foo.cpp中
template <class T>
void foo::bar(const T &t)
{
std::cout << "General." << std::endl;
}
template void foo::bar<int>(const int &t);
//主
foo toto;
toto.bar<int>(42);
3)实施专门的模板化方法......?
// foo.hpp
class foo
{
public:
template<typename T>
void bar(const T &t);
template<>
void bar<float>(const float &t);
};
// Foo.cpp中
template <class T>
void foo::bar(const T &t)
{
std::cout << "General." << std::endl;
}
template <>
void foo::bar<float>(const float &t)
{
std::cout << "Float specialization." << std::endl;
}
template void foo::bar<int>(const int &t);
template void foo::bar<float>(const float &t); //Seems to be not correct!
//主
foo toto;
toto.bar<float>(42);
//编译错误:
error LNK2019: unresolved external link "public: void __thiscall foo::bar<float>(float const &)" (??$bar@M@foo@@QAEXABM@Z) referenced in _main function
我无法解决这个问题。
非常感谢您的帮助。
答案 0 :(得分:0)
你声明不正确,应该是:
class foo
{
public:
template<typename T>
void bar(const T &t);
};
在cpp文件中:
template <class T>
void foo::bar(const T &)
{
std::cout << "General." << std::endl;
}
template <>
void foo::bar<float>(const float &)
{
std::cout << "Float specialization." << std::endl;
}
template void foo::bar<int>(const int &);