我有一些模板代码,我希望将其存储在 CPP 文件中,而不是内联在标题中。我知道只要您知道将使用哪些模板类型就可以做到这一点。例如:
.h 文件
class foo { public: template <typename T> void do(const T& t); };
.cpp 文件
template <typename T> void foo::do(const T& t) { // Do something with t } template void foo::do<int>(const int&); template void foo::do<std::string>(const std::string&);
请注意最后两行 - foo::do 模板函数仅与 ints 和 std::strings 一起使用,因此这些定义意味着应用程序将链接。
我的问题是 - 这是一个讨厌的 hack 还是可以与其他编译器/链接器一起使用?我目前仅将此代码与 VS2008 一起使用,但希望移植到其他环境。
您描述的问题可以通过在标题中定义模板或通过您上面描述的方法来解决。
我建议阅读C++ FAQ Lite中的以下几点:
他们详细介绍了这些(和其他)模板问题。