什么样的;“特征”;在C+中使用/定义+;0x标准 C++中的一个特性封装了一系列操作,允许算法或数据结构与实例化的类型进行操作。code>char\u traits是分组string和文件所需函数的示例
但并不是所有的特质都有“特质”的名字,对吗<代码>数值限制浮现在脑海中。这也是一种“特质”吗?即使没有“特质”这个名字 那么,除了我发现的示例之外,还有其他模板可以/应该被视为“特质”:什么样的;“特征”;在C+中使用/定义+;0x标准 C++中的一个特性封装了一系列操作,允许算法或数据结构与实例化的类型进行操作。code>char\u traits是分组string和文件所需函数的示例,c++,c++11,traits,typetraits,C++,C++11,Traits,Typetraits,但并不是所有的特质都有“特质”的名字,对吗数值限制浮现在脑海中。这也是一种“特质”吗?即使没有“特质”这个名字 那么,除了我发现的示例之外,还有其他模板可以/应该被视为“特质”: allocator\u traits如何获取内存 指针特性如何间接访问对象 type\u traits元编程 符号序列的字符 iterator\u traits如何前进、后退和返回元素 regex\u traits用于。。。正则表达式 我想,我也在问,特质是否有一个纯粹的定义 我特别不确定的是: 上述数值限制 s
如何获取内存allocator\u traits
如何间接访问对象指针特性
元编程type\u traits
- 符号序列的字符
如何前进、后退和返回元素iterator\u traits
用于。。。正则表达式regex\u traits
- 上述数值限制
s定制“特征”[20.11.4],即duration\u值
- 散列呢?函子
可以被认为是一种特征吗hash
- 如果是这样的话,难道不是所有的需求都是“特征”,比如“可复制的”,等等吗
- 那么,被抛弃的“概念”是最终的“特质”定义吗
- *numeric_limits*明确表示数字类型的一组特征。
- 所有的要求,如“可复制”等,都是可以理解的 对于其他人,我无法发表评论,但如有疑问: 把一个特征想象成一个小物体,它的主要目的是携带 其他对象或算法用于确定“策略”的信息 或“实施细节”。-比亚恩·斯特罗斯图普 更新:为了对霍华德提供的广泛列表做出一点贡献:
- 时间相关叛徒
- 正则特征
这意味着一个特性是C++类模板。例如,
std::forward\u iterator\u tag
等迭代器基类不是特征
注-
特征中的某些值本质上可能是布尔值。由于C++模板限制,特征值不能是浮点类型。但是,traits也可以包含函数,这些函数对返回类型没有限制
纯特征类只包含静态成员;没有相关的实例数据。因此,它们也不包含构造函数。这种“纯”的区别使我们能够将像std::vector这样的类描述为非纯特征类:实际上它们是它们自己的特征类。这里是一个按标准划分的特征列表。我可以很容易地忽略一些 新的C++11特性:
is_error_code_enum
is_error_condition_enum
pointer_traits
allocator_traits
Just about everything in <type_traits>
treat_as_floating_point
duration_values
uses_allocator
regex_traits
numeric_limits
char_traits
iterator_traits
我真正喜欢与新的枚举类类型一起使用的是 底层_type::type,它为您提供枚举类的存储说明符的类型
enum class My_Enum : unsigned int { ... }
underlying_type<My_Enum>::type -> unsigned int
enum类My_enum:unsigned int{…}
基础类型::类型->无符号整数
在枚举转换和序列化中非常有用。这应该是CW,因为有许多可能的“正确”答案。我猜这个选项已经不存在了?无论如何,iostreams facet是trait的一种形式。我不认为
hash
被恰当地视为trait类,因为它不仅仅提供关于类的编译时信息。这个定义如何:“一个没有非静态成员的模板类,其静态成员只依赖于模板参数。”我要说的是,numeric\u limits
并不是严格意义上的trait类,因为它的值并不都是编译时的静态常量或constexpr
——比如max()
这是一个运行时值。@Kerrek SB:Norchar\u traits
严格来说是编译时:length
或compare
也必须在运行时进行计算。顾名思义,它被认为是一个trait类。我认为numeric\u limits
是一个非常有效的trait类。它没有状态,只提供有关类型的信息。事实上,它的一些信息是以静态函数的形式存在的,这并不意味着它不是traits类,而是策略?嗯,这也是Alexandrescu的观点吗?我认为特质是政策类的一个特殊情况。Alexandrescu在书中提到它们是一种通用编程技术,“Traits是一种通用编程技术,它允许根据类型做出编译时决策,就像您根据值做出运行时决策一样。”但他并没有明确提到特质是策略,我将它们分开的方式是说特质是无状态的,只是给你一个类型的信息。策略类可能具有state,因此您可以对同一类型使用不同的策略。此外,特征往往是非常小的“原始”类型、值和功能(