繁体   English   中英

C++11 中的部分专业化和常量难题

[英]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.

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