我一直试图通过Boost类型特征标题,并且由于无数#define提供了强烈的不可读性,现在感觉很恶心。还有一些#define。
具体来说,我有兴趣弄清楚以下3个特征:如果类型T是数组,类或枚举。
任何人都可以帮忙建议破解明显疯狂背后的方法吗?就像你从一种类型,任何相关的阅读材料等中找出特征背后的理论一样。
答案 0 :(得分:4)
is_array
非常简单明了:
template<class T>
struct is_array{
static const bool value = false;
};
template<class T, std::size_t N>
struct is_array< T (&)[N] >{
static const bool value = true;
};
只是对引用数组类型的简单部分特化。
is_class
有点复杂,依赖于重载解析以及类和结构拥有构造函数(或析构函数)的事实。由于我目前在iPod Touch上,我无法真正展示一个例子。一旦我再次访问PC,我就会编辑一个。
is_enum
依赖于我认为的编译器内在函数,所以没有例子。
注意:这里的所有内容都来自内存,我可能错误的是enum。