C++模板专用化成员函数的定义
Definition of C++ template specialization member function
给定以下类和专业。 如何在类定义之外实现模板类和两个专用化的函数体? 显然,每个函数实现都需要声明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() {}
住在戈博尔特上
相关文章:
- 不同翻译单元中不可重载的非内联函数定义
- Visual Studio中的函数声明和函数定义问题
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 具有enable_if外部类原型的模板类构造函数定义
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为函数定义符号不明确的指针参数
- C++模板专用化 - 无法匹配函数定义
- 错误:在第 6 行'{'标记之前,此处不允许使用函数定义
- 找不到 #define 的函数定义
- 根据类型特征更改函数定义?
- 将抽象基类中的所有纯虚函数定义为 varaidaic 模板
- 命名空间更改函数定义
- "Type&"与C++函数定义中的"Type*"
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 如何从 C++ 中的现有模板函数定义新函数
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 为什么c++允许成员函数定义中实例的私有成员访问
- Qt基类函数定义
- C++函数定义中参数列表后面额外一对括号的含义