下面是一个使用enable_if
部分地专门化类模板成员的示例代码:
#include
#include
// 声明一个类模板
template
class MyClass {
public:
// 默认的成员函数
void func() {
std::cout << "Default func" << std::endl;
}
// 部分地专门化成员函数,仅适用于整型类型
template::value>::type* = nullptr>
void func() {
std::cout << "Integral func" << std::endl;
}
// 部分地专门化成员函数,仅适用于浮点类型
template::value>::type* = nullptr>
void func() {
std::cout << "Floating point func" << std::endl;
}
};
int main() {
MyClass obj1;
obj1.func(); // 输出:Integral func
MyClass obj2;
obj2.func(); // 输出:Floating point func
MyClass obj3;
obj3.func(); // 输出:Default func
return 0;
}
在上面的示例代码中,我们定义了一个名为MyClass
的类模板,它有一个默认的成员函数func()
和两个部分地专门化的成员函数func()
。为了部分地专门化这些成员函数,我们使用了enable_if
和is_integral
、is_floating_point
类型特性。
在func()
的定义中,我们使用了typename U = T
来定义一个新的模板参数U
,这样就可以在enable_if
的表达式中使用该类型。然后,我们使用std::enable_if
作为一个默认的模板参数,它仅在U
是整型类型时才会被启用。类似地,我们使用std::enable_if
来部分地专门化成员函数func()
,使其仅在U
是浮点类型时才会被启用。
在main()
函数中,我们创建了三个MyClass
的实例,并调用它们的func()
函数。根据实例化的类型,将会调用相应的成员函数。
总结:通过使用enable_if
以及类型特性,我们可以部分地专门化类模板的成员函数,从而根据类型进行不同的处理。这在某些情况下非常有用,可以根据类型的特性来提供不同的实现。