gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:00:21 25 4
gpt4 key购买 nike

给定一个类模板:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com