【发布时间】:2017-07-20 10:21:15
【问题描述】:
我想使用enable_if 为某些类型定义一个类。在这些类型中,我需要使用一些模板化的类型,我无法使其工作。这是一个 MWE:
模板类A:
template<typename T, typename Enable = void> class A;
它对一些简单类型的特化,比如这里的整数类型,可以定义如下:
template<typename T>
class A<T, std::enable_if<std::is_integral<T>::value>::type>
{ ... };
现在我定义了一堆模板类型:
template<typename U> class X {...};
template<typename U> class Y {...};
我应该如何继续对 A 类型的 X 和 Y 进行专业化?
两次失败的尝试:
-
例如,声明
A<X<int> >类型的对象会产生错误incomplete type:template<typename U> template<typename T> class A<T, std::enable<std::is_same<T, X<U> >::value || std::is_same<T, Y<U> >::value>::type> { ... }; -
如下,错误为
'T' is not a template。template<typename U> template<typename T> class A<T<U>, std::enable<std::is_same<T, X>::value || std::is_same<T, Y>::value>::type> { ... };
【问题讨论】:
标签: c++ templates sfinae enable-if