2014-11-05 82 views
2

我想创建一个模板类foo,并根据foo的模板类型使其成员函数test()中的一个成为函数。 M个第一尝试是包括在头文件中定义FOO代码:C++中模板类的成员函数的专门化

template<typename Type> 
class foo 
{ 
    foo() 
    ~foo() 
    test() 
}; 

template<> 
foo<float>::test() 
{ code ... }; 

的问题是,如果我编译和使用该标题链接多个文件,我得到多重定义的错误。

我也尝试在头文件中声明专门化,所以编译器知道它不应该生成模板化代码。然后我把专门的定义放在一个单独的C++文件中进行编译。标题然后看起来像:

template<typename Type> 
class foo 
{ 
    foo() 
    ~foo() 
    test() 
}; 

template<> 
foo<float>::test(); 

但是,我得到了一个未定义的引用错误。

我该如何组织专业会员功能的声明和定义?

回答

4

声明放入源文件中的头文件和定义

由于声明完全指定了该函数,因此该定义可以位于任何翻译单元中。与应用程序链接。

或者在头文件中定义函数定义inline

+0

谢谢。我发现在第二种情况下我的错误来自未定义析构函数。 – vkubicki 2014-11-05 15:31:25