C ++类型特征

时间:2013-12-22 22:29:12

标签: c++ templates metaprogramming typetraits

我理解他们编码有关您实例化它们的类型的信息,但是它们是如何工作的?例如,假设类型特征std::is_class。它是如何工作的?所有的实现看起来都像空结构,我必须承认我在摸不着头脑。

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

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

1 个答案:

答案 0 :(得分:6)

某些类型特征,如std::is_class,只使用编译器内在函数(又称内置函数)。没有编译器的特别支持,你不能自己编写这些文件。

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