C ++模板专业化成员函数的定义

时间:2018-04-19 21:00:25

标签: c++ c++11

鉴于以下课程和专业。我如何实现模板类的函数体以及类定义之外的两个特化?显然,每个函数实现都需要声明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(); };

res

1 个答案:

答案 0 :(得分:4)

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

基本上,要定义此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() {}

你写道:

{{1}}

Live on Godbolt