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