在C ++中,impossible to implement certain C++ standard library type traits没有编译器内在函数,仅使用C ++语言。 Traits直接处理C ++类型。根据§17.6.1.3.2,C ++标准库的独立实现必须实现<type_traits>
。这是否有效地意味着C ++标准要求所有支持想要支持独立C ++标准库实现的编译器的非标准语言扩展/编译器内在函数?
为什么在没有核心语言支持的情况下允许此类型特征进入标准?
答案 0 :(得分:3)
C ++标准库有很多方面,如果没有编译器的支持,无法实现。例如,type_info
。一个独立的C ++库&#34;实现无法提供这样的类型,因为它是基于关键字的表达式的结果:typeid
。唯一可以提供此类功能的人是编译器编写者,因为编译器是必须生成这些对象的人。
标准库的许多其他元素也是如此。 exception_ptr
,current_exception(s)
,initializer_list
等。在C ++标准中,这些内容的完整章节。
如果没有编译器支持,并非所有标准库组件都可以实现。类型特征只是一个独立的C ++库无法实现的另一件事。不是ISO标准C ++。
至于为什么他们没有提供实施它们所需的工具?因为那会花费更多的时间。请注意,反射甚至不是完全形成的TS,而类型特征现在已经标准化了5年。
很难指定像反射这样的通用工具。准确了解您需要的行为以及应如何提供行为。查看常见的使用模式(如Boost所示)并使用它们要容易得多。类型特征是反思的悬而未决的结果。