将C ++模板函数定义存储在.CPP文件中
我有一些模板代码,我宁愿将它们存储在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,因此这些定义意味着应用程序将链接。
我的问题是 - 这是一个讨厌的黑客攻击,还是会与其他编译器/连接器一起工作? 我现在只在VS2008上使用这个代码,但是会想要移植到其他环境。
您所描述的问题可以通过在标题中定义模板或通过上述方法来解决。
我建议阅读C ++ FAQ Lite中的以下几点:
他们详细介绍了这些(和其他)模板问题。
对于本页其他人想知道什么是正确的语法(如我一样)显式模板特化(或至少在VS2008),其以下...
在你的.h文件中...
template<typename T>
class foo
{
public:
void bar(const T &t);
};
并在你的.cpp文件中
template <class T>
void foo<T>::bar(const T &t)
{ }
// Explicit template instantiation
template class foo<int>;
此代码格式良好。 你只需要注意,模板的定义在实例化的时候是可见的。 引用标准§14.7.2.4:
非导出函数模板,非导出成员函数模板或类导出模板的非导出成员函数或静态数据成员的定义应存在于明确实例化的每个翻译单元中。
链接地址: http://www.djcxy.com/p/6329.html上一篇: Storing C++ template function definitions in a .CPP file