特征类是如何工作的,它们是做啥的?

Posted

技术标签:

【中文标题】特征类是如何工作的,它们是做啥的?【英文标题】:How do traits classes work and what do they do?特征类是如何工作的,它们是做什么的? 【发布时间】:2011-04-28 03:26:54 【问题描述】:

我正在阅读 Scott Meyers 的 Effective C++。他在谈论特征类,我知道我需要它们在编译时确定对象的类型,但我无法理解他对这些类实际上做什么的解释? (从技术角度)

【问题讨论】:

【参考方案1】:

也许你期待某种使类型特征起作用的魔法。在这种情况下,请失望——没有魔法。类型特征是手动为每种类型定义的。例如,考虑iterator_traits,它为迭代器提供类型定义(例如value_type)。

使用它们,您可以编写

iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.

但要实现这一点,&lt;iterator&gt; 标头中实际上有一个显式定义,其内容如下:

template <typename T>
struct iterator_traits<T*> 
    typedef T value_type;
    // …
;

这是iterator_traits 类型的部分特化,用于T* 形式的类型,即某些泛型类型的指针。

同样,iterator_traits 专门用于其他迭代器,例如typename vector&lt;T&gt;::iterator.

【讨论】:

+1 表示没有魔法。尽管如此,难道没有一些特性(例如在 C++0x 标准库中)不能仅使用语言可靠地定义,并且需要编译器的特殊“神奇”帮助才能工作? @UncleBens:我不知道 C++0x 定义了哪些特征,但我确信在 C++0x 之前不存在这样的特征。 现在std::underlying_type中不就是一种魔法吗? @Wolf C++11 添加了一些无法在用户端实现的特性,它们需要编译器支持。而且,是的,std::underlying_type 就是其中之一。 @Wolf 答案是在 C++11 出现之前写的 long【参考方案2】:

特征类决定对象的类型。相反,它们提供有关类型的附加信息,通常通过在 trait 中定义 typedef 或常量。

【讨论】:

以上是关于特征类是如何工作的,它们是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章

这个条件运算符是做啥的? [复制]

SQL:主键和索引到底是做啥的?

这些 .htaccess 规则是从哪里来的,它们到底是做啥的?

大数据的Hadoop是做啥的?

安卓软件开发中的xml是做啥的,要如何使用?有啥作用

阿里里巴巴和百安居分别历史它们是做啥的