C++中模板类成员函数的特化

Posted

技术标签:

【中文标题】C++中模板类成员函数的特化【英文标题】:Specialization of member function of a template class in C++ 【发布时间】:2014-11-05 14:59:34 【问题描述】:

我想创建一个模板类 foo,并根据 foo 的模板类型对其成员函数 test() 之一进行专门化。 M 第一次尝试是在定义 foo 的头文件中包含代码:

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();

然后我得到一个未定义的引用错误。

我应该如何组织专用成员函数的声明和定义?

【问题讨论】:

【参考方案1】:

声明放在头文件中,将定义放在源文件中。

由于函数完全由声明指定,定义可以在任何翻译单元中。与应用程序相关联。

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

【讨论】:

谢谢。我发现我在第二种情况下的错误来自没有定义析构函数。

以上是关于C++中模板类成员函数的特化的主要内容,如果未能解决你的问题,请参考以下文章

这是为成员函数的 C++ 模板部分特化构造类的好方法吗?

C++模板(函数模板/类模板)

C++模板(函数模板/类模板)

新手用C++写了个泛型堆,效率竟比STL的更快?

通过类模板特化访问成员数据

C++ Primer 5th笔记(chap 16 模板和泛型编程) 类模板的成员函数