繁体   English   中英

根据 C++11 中的类型要求,专业化 class 模板成员 function

[英]Specializing class template member function based on type requirement in C++11

给定一个 class 模板:

template<typename T>
class AAA
    {
    void XXX(T val) { /* code */ }
    void YYY(T val) { /* code */ }
    };

我知道我可以将成员 function XXX 专门用于特定类型,例如“int”:

template<> void AAA<int>::XXX(int val) { /* code * }

但我真正想做的是专门化 XXX function 不是基于 T 的特定类型,而是基于 T 的特定类型要求,例如 T 应该是 copy_constructible,例如。 我知道 std::enable_if 是如何工作的,但无法想出正确的 C++ 语法来做我想做的事。 请注意,我知道一种技术,可以让我部分专门化 class 模板本身,以便 T 可复制构造,但我不想这样做。

您不能部分特化 function,但可以部分特化整个 class:

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 */ }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM