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

标签 c++ templates

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

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

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

问题是,如果我使用此 header 编译并链接多个文件,则会收到多重定义错误。

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

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

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

但随后我收到了 undefined reference 错误。

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

最佳答案

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

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

或者将函数定义内联添加到头文件中。

关于c++ - C++ 中模板类成员函数的特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26760264/

相关文章:

c++ - 函数指针是否有声明?

c++ - 为可变参数模板中给定的所有类型添加模板特化

c++ - 如何编写 `is_complete` 模板?

c++ - 为什么这个函数模板调用有效?

c++ - 如果参数类型取决于模板参数,为什么编译器不能推断返回类型

c++ - 为什么我不能使 C++ 中的对象具有作为其他对象的数据成员?

c++ - 无法在 Ubuntu 上使用 CMake 构建 C++ 程序的断点

c++ - 存储和计算字符串或整数重复项的最佳方法是什么?

c++ - 以下 C++ 模板程序中的无效语句是什么?

vba - VBA : Run-Time error '91' (Code working in template but not “new from template” )