我怎样才能部分专门化所有枚举的类模板? [英] How can I partially specialize a class template for ALL enums?

查看:87
本文介绍了我怎样才能部分专门化所有枚举的类模板?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说我有一些类模板:

template<typename T>
class {
// ....
}

我可以通过以下方式针对 ALL 指针部分地专门化该模板:

I can partially specialize this template for ALL pointers by:

template<typename T>
class<T *> {
// ....
}

我可以以某种方式专门研究 ALL 枚举的模板?即执行以下操作:
(但这不起作用)

Can I somehow specialize the template for ALL enums? i.e., do something like: (this doesn't work, though)

template<typename T>
class<enum T> {
// ....
}


推荐答案

使用C ++ 11和SFINAE。

use C++11 and SFINAE.

#include <type_traits>

template<typename T, typename = void>
struct Specialize
{
};

template<typename T>
struct Specialize<T, typename std::enable_if<std::is_enum<T>::value>::type>
{
   void convert() { }
};

enum E
{
};

int main()
{
   Specialize<E> spec;
   spec.convert();
}

在没有C ++ 11的情况下使用 boost :: enable_if boost :: is_enum

Without C++11 use boost::enable_if and boost::is_enum

这篇关于我怎样才能部分专门化所有枚举的类模板?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆