c++ - 带有基类的模板类

标签 c++ templates metaprogramming derived

如何为整个基类特化一个类?所以我有

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/

相关文章:

python - 为什么 `object` 是 `type` 的实例,而 `type` 是 `object` 的实例?

c++ - 使用 boost::mpl 的类型组合

c++ - 删除 "using namespace std::rel_ops"可以改变行为吗?

javascript - 如何在使用 fastify 服务之前替换 Javascript 变量?

reflection - Grails/Groovy - 域对象 - 其属性映射

visual-studio-2010 - Visual Studio如何生成类模板?

c++ - 如果 constexpr 而不是标签分派(dispatch)

c++ - 哈希函数

c++ - 从节点和关系生成 block 的算法

c++ - 如果 RAM 大小小于要求,则分配内存