如何解决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 举报,一经查实,本站将立刻删除。