问题描述
|
我一直在尝试通过Boost类型特征标头,由于无数#define提供的强烈的不可读取性,现在我感到很恶心。然后再#define。
具体来说,我有兴趣弄清楚以下三个特征:类型T是数组,类还是枚举。
任何人都可以帮忙提出一些破译表面疯狂背后的方法的方法吗?就像您从类型,任何相关的阅读材料等中了解特征的背后的理论一样。
解决方法
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
依赖于我相信的编译器内部函数,因此此处没有示例。
注意:这里的一切都来自内存,我可能会用枚举错误。