如何为整个基类特化一个类?所以我有
template <bool b>
struct selector
{
};
template <typename T1, typename T2>
struct typeequal : selector<false>
{
};
template <typename T>
struct typeequal<T, T> : selector<true>
{
};
不,我想创建专门的类,一个用于 if T1 = T2,另一个用于 if T1 != T2。我试过
template <typename T>
class myClass;
template <>
class myClass<selector<true> >
{
// ...
}
template <>
class myClass<selector<false> >
{
// ...
}
然后我试着调用它
myClass<typeequal<int, int> > x;
这没有用。我认为,问题是在检查哪个模板匹配时没有转换。但是如何修复呢?
最佳答案
特化系统不考虑基类。不过,您仍然可以找到具有 SFINAE 内省(introspection)和部分特化的基础。
template <typename T, typename = void >
class myClass;
template <typename T>
class myClass<T,
typename std::enable_if<
std::is_same<
typename T::selector, // If member "selector"
selector<true> // is the class, assume it's derived
>::value
> ::type >
{
// ...
};
template <typename T>
class myClass<T,
typename std::enable_if< std::is_same< typename T::selector, selector<false> >::value
> ::type >
{
// ...
};
关于c++ - 带有基类的模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22554294/