给定一个类模板:
template<typename T>
class AAA
{
void XXX(T val) { /* code */ }
void YYY(T val) { /* code */ }
};
我知道我可以将成员函数 XXX 专门用于特定类型,例如“int”:template<> void AAA<int>::XXX(int val) { /* code * }
但我真正想做的是专门化 XXX 功能,而不是基于特定的T 的类型,但基于 T 的特定类型要求,例如 T 应该是
以 copy_constructible 为例。我知道 std::enable_if 是如何工作的,但可以
没有想出正确的 C++ 语法来做我想做的事。请注意,我知道
一种使我能够将类模板本身部分专门化用于 T 的技术
可复制构造,但我不想这样做。
最佳答案
你不能部分特化一个函数,但你可以部分特化整个类:
template<typename T, typename /* placeholder so there is a place for SFINAE */ = void>
class AAA
{
void XXX(T val) { /* code */ }
void YYY(T val) { /* code */ }
};
template<typename T>
class AAA<T, std::enable_if_t<std::is_copy_constructible_v<T>>>
{
void XXX(T val) { /* code when T is copy constructible */ }
void YYY(T val) { /* code when T is copy constructible */ }
};
关于c++ - C++11中根据类型要求特化类模板成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66509437/