将C+模板函数定义存储在.cpp文件中

将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:string,因此这些定义意味着应用程序将链接。

我的问题是-这是一个令人讨厌的黑客攻击,还是与其他编译器/链接器一起工作?目前我只在VS 2008中使用此代码,但希望移植到其他环境。


繁星coding
浏览 1771回答 3
3回答

森栏

对于此页面上的其他人来说,对于显式模板专门化(或至少在VS 2008中)正确的语法是什么(就像我一样),下面是.在你的.档案里.。template<typename&nbsp;T>class&nbsp;foo{public: &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;bar(const&nbsp;T&nbsp;&t);};在你的.cpp文件中template&nbsp;<class&nbsp;T>void&nbsp;foo<T>::bar(const&nbsp;T&nbsp;&t){&nbsp;}//&nbsp;Explicit&nbsp;template&nbsp;instantiationtemplate&nbsp;class&nbsp;foo<int>;

一只名叫tom的猫

这个代码格式很好。您只需注意模板的定义在实例化时是可见的。引用标准,第14.7.2.4节:非导出函数模板、非导出成员函数模板或类模板的非导出成员函数或静态数据成员的定义应存在于显式实例化的每个转换单元中。
打开App,查看更多内容
随时随地看视频慕课网APP