给出以下类(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() {}
关于c++ - C++模板特化成员函数的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49930163/