[英]Partial specialization and const conundrum in C++11
一个 class 模板:
template <class X, class Y > class MyTemplate;
我想部分专门化这个 class 以便当 X 是 const 类型时,Y 是int
并且如果我创建 object 则选择部分专门化代码,例如:
MyTemplate<sometype const> var;
而如果 X 是非常量类型,则 Y 是double
精度类型,并且如果我创建 object 则选择部分专业化代码,例如:
MyTemplate<sometype> var;
这在 C++11 中是否可行? 如果是这样,怎么做? 如果不是,这在 C++20 中是否有可能的概念和要求?
部分专业化(可能有促成因素):
template <class X, class Y, typename Enabler = void> class MyTemplate;
template <class X>
class MyTemplate<const X, int>
{
// ...
};
template <class X>
class MyTemplate<X, double, std::enable_if_t<!std::is_const_v<X>>>
{
// ...
};
//...
将 C++14 X_t<T>
/ X_v<T>
替换为类型名typename X<T>::type
/ X<T>::value
为 C++11。
您实际上不需要为此使用部分专业化。 你可以写:
template <typename X,
typename Y =
typename std::conditional<std::is_const<X>::value, int, double>::type>
class MyTemplate;
这是一个演示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.