为什么C ++中没有针对所有C ++标准库类型特征的语言支持?

时间:2016-04-02 13:57:31

标签: c++ c++11 standards language-lawyer c++-standard-library

在C ++中,impossible to implement certain C++ standard library type traits没有编译器内在函数,仅使用C ++语言。 Traits直接处理C ++类型。根据§17.6.1.3.2,C ++标准库的独立实现必须实现<type_traits>。这是否有效地意味着C ++标准要求所有支持想要支持独立C ++标准库实现的编译器的非标准语言扩展/编译器内在函数?

为什么在没有核心语言支持的情况下允许此类型特征进入标准?

1 个答案:

答案 0 :(得分:3)

C ++标准库有很多方面,如果没有编译器的支持,无法实现。例如,type_info。一个独立的C ++库&#34;实现无法提供这样的类型,因为它是基于关键字的表达式的结果:typeid。唯一可以提供此类功能的人是编译器编写者,因为编译器是必须生成这些对象的人。

标准库的许多其他元素也是如此。 exception_ptrcurrent_exception(s)initializer_list等。在C ++标准中,这些内容的完整章节

如果没有编译器支持,并非所有标准库组件都可以实现。类型特征只是一个独立的C ++库无法实现的另一件事。不是ISO标准C ++。

至于为什么他们没有提供实施它们所需的工具?因为那会花费更多的时间。请注意,反射甚至不是完全形成的TS,而类型特征现在已经标准化了5年。

很难指定像反射这样的通用工具。准确了解您需要的行为以及应如何提供行为。查看常见的使用模式(如Boost所示)并使用它们要容易得多。类型特征是反思的悬而未决的结果。