微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++11 中的部分特化和 const 难题

如何解决C++11 中的部分特化和 const 难题

类模板:

template <class X,class Y > class MyTemplate;

我想部分特化这个类,以便当 X 是常量类型时,Y 是 int 并且如果我创建一个对象,则选择部分特化代码,例如:

MyTemplate<sometype const> var;

而如果 X 是非常量类型,则 Y 是 double 并且如果我创建一个对象,则选择部分特化代码,例如:

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;

这是一个demo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。