2013-12-22 123 views
10

我明白他们编码有关您实例化它们的类型的信息,但是它们是如何工作的?举例来说,类型特征std::is_class。它的工作如何?所有的实现看起来都是空洞的结构,我必须承认我在挠头。C++类型特征

这些名称看起来足够描述性,所以我可以理解它们的含义,但什么是使用类型特征的典型场景?

我找不到关于这个问题的介绍性资源(或关于SO的问题)。指针将不胜感激。

+0

它们可以由编译器实现(即使它们看起来像普通的类模板定义)。然而,我认为'is_class'的一个可能的实现在Alexandrescu的“现代C++设计”中有所描述 –

+1

相关:http://stackoverflow.com/q/20181702/420683 – dyp

回答

6

某些类型特征,如std::is_class只是使用编译器内在函数(aka内置函数)。如果没有编译器的特别支持,你不能自己编写它们。

类型特征在泛型上下文中非常有用 - 您可能希望基于类型的属性专门化事物,或者对模板参数施加限制。例如,当迭代器是指向POD的指针时,std::copy的实现可以在内部使用std::memcpy而不是显式循环。这可以通过SFINAE来实现。