【问题标题】:C++ Type TraitsC++ 类型特征
【发布时间】:2013-12-22 22:29:11
【问题描述】:

我知道它们会编码有关您实例化它们的类型的信息,但是它们是如何工作的?例如,类型特征std::is_class。它是如何工作的?所有的实现看起来都是空的结构,我得承认我摸不着头脑。

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

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

【问题讨论】:

  • 它们可以由编译器实现(即使它们看起来像常规的类模板定义)。但是,我认为 Alexandrescu 的“现代 C++ 设计”中描述了is_class 的可能实现

标签: c++ templates metaprogramming typetraits


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多