c++ - C++模板特化成员函数的定义

标签 c++ c++11

给出以下类(class)和专业。我将如何实现模板类的函数体以及类定义之外的两个特化?显然,每个函数实现都需要声明为内联。

template <typename T1, typename = void>
struct MyClass
{
    void func();
};
template <typename T1>
struct MyClass<T1, std::enable_if_t<std::is_integral<T1>::value>>
{
    void func();
};
template <typename T1>
struct MyClass<T1, std::enable_if_t<std::is_floating_point<T1>::value>>
{
    void func();
};

最佳答案

要对模板类的成员函数进行类外定义,请重复模板参数,以便形成类的名称。

基本上,定义这个func():

template <typename T1, typename = void>
struct MyClass
{
    void func();
};

你会写:

template <typename T1, typename T2>
void MyClass<T1, T2>::func() {}

定义这个:

template <typename T1>
struct MyClass<T1, std::enable_if_t<std::is_integral<T1>::value>>
{
    void func();
};

你会写:

template <typename T1>
void MyClass<T1, std::enable_if_t<std::is_integral<T1>::value>>::func() {}

Live on Godbolt

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

相关文章:

C++ 代码依赖/调用图 "viewer"?

C++ 继承自在另一个类中用作类型的类

c++ - qt 5.7 + Xcode 8.1 + os x El Capitan - 无法解析 'macosx' 的 SDK 路径

c++11 - 为参数包 : Clang vs. GCC 的每个参数扩展一个 lambda

c++ - Variadic 模板函数名称查找无法找到特化

c++ - 实现自己的 begin() 和 end()

c++ - 什么是 __pragma 以及 __pragma 和 #pragma 之间的区别是什么

c++ - 创建一个程序来输出 4 个三角平方数

c++ - 采用 std::vector 或 std::array 的模板函数

c++ - 启用默认初始化列表构造函数