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

Definition of C++ template specialization member function

本文关键字:函数 定义 成员 专用 C++      更新时间:2023-10-16

给定以下类和专业。 如何在类定义之外实现模板类和两个专用化的函数体? 显然,每个函数实现都需要声明inline

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() {}

住在戈博尔特上