c++ - C++11中根据类型要求特化类模板成员函数

标签 c++ c++11 template-specialization enable-if

给定一个类模板:

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/

相关文章:

c++ - 如何使用 Qt (C++) 检查程序是否按其名称运行

c++ - OpenGL GL_POLYGON_SMOOTH 二维抗锯齿从四边形创建三边形

c++ - 部分匹配 std::map 中的长键

c++ - 模板化类中模板化成员函数的特化

c++ - 如何使用 is_base_of 专门化模板而不与主模板混淆?

c++ - cv::Mat到QImage然后返回

c++ - 不完整类型上的 std::is_constructible

c++ - 什么时候对流类型使用 std::swap?

c++ - 用于赋值的参数化构造函数

c++ - '仅将成员函数添加到类的专用模板