5

我一直在尝试浏览 Boost type-traits 标头,鉴于无数#define 提供的强烈不可读性,我现在感觉很恶心。然后还有一些#define。

具体来说,我有兴趣弄清楚以下 3 个特征:类型 T 是数组、类还是枚举。

任何人都可以帮助提出一些破译明显疯狂背后的方法的方法吗?就像你如何从类型中找出特征背后的理论,任何相关的阅读材料等。

4

1 回答 1

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我相信依赖于编译器内在函数,所以没有例子。

注意:这里的一切都来自记忆,我可能对枚举有误。

于 2011-05-25T18:06:16.420 回答