C++类型特征

C++ Type Traits

本文关键字:特征 类型 C++      更新时间:2023-10-16

我知道它们对有关您实例化它们的类型的信息进行编码,但它们是如何工作的呢?例如,类型特征std::is_class。它是如何工作的?所有的实现看起来都是空的结构,我必须承认我挠头。

这些名称似乎具有足够的描述性,因此我可以理解它们的含义,但是使用类型特征的典型场景是什么?

我找不到有关该主题的介绍性资源(或有关SO的问题)。指点将不胜感激。

某些类型特征,例如std::is_class仅使用编译器内部函数(也称为内置)。如果没有编译器的特殊支持,您无法自己编写这些内容。

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