我怎样才能部分专门化所有枚举的类模板? [英] How can I partially specialize a class template for ALL enums?
本文介绍了我怎样才能部分专门化所有枚举的类模板?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
说我有一些类模板:
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屋!
查看全文