【发布时间】:2021-06-05 03:08:57
【问题描述】:
给定一个类模板:
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 的技术 可以复制构造,但我不想这样做。
【问题讨论】:
-
所以基本上你是在问如何使用
std::enable_if(in c++11)? -
函数不能部分特化,在 C++ 中。您必须部分专业化课程。根据具体情况,您通常可以找到一些解决方法来专门化模板类,例如使用辅助类来实现类方法,以及部分专门化辅助类。
-
顺便说一下,您的示例是专门针对类,而不是功能。
-
请注意,使用 C++20 概念,我认为您可以轻松重载有关
T的函数是否可复制。 -
Enlico,上面的代码特化了类模板的一个成员函数。
标签: c++ c++11 template-specialization enable-if