在C++ 0x标准中使用/定义了什么样的"特征"

tow*_*owi 24 c++ traits type-traits c++11

C++中的特征封装了一系列操作,这些操作允许算法或数据结构使用与其实例化的类型的操作符.char_traits是分组string和文件所需功能的示例.

但并非所有特质都在他们的名字中有"特质",对吧?numeric_limits浮现在脑海中.这也是"特质"吗?即使没有名称"特质"吗?

那么,是否有其他模板可以/应该被视为"特征"?除了我发现的例子:

  • allocator_traits 如何获得记忆
  • pointer_traits 如何间接访问对象
  • type_traits 元编程
  • char_taits 符号序列
  • iterator_traits 如何前进,后退和元素
  • regex_traits 为...正则表达式.

我想,我要问的是,是否有一个纯粹的特征定义

我特别不确定的一些事情是:

  • numeric_limits 上文提到的
  • <chrono>定制"特征",[20.11.4],即 duration_values
  • Hashing怎么样?hash<>算子可以被认为是一种特质吗?
  • 如果是这样的话,并不是所有的要求都是"特征",比如"CopyAssignable"等等?
  • 然后,废弃的"概念"是最终的"特质" - 定义吗?

更新:究竟是什么让特质成为特质似乎在细节上有点争议.也许可以回答另一个问题:是否有一个全面的列表,哪些类似特征的类对C++ 0x来说是新的,哪些已经在C++ 03中?也许有人知道某个地方的链接?

How*_*ant 10

这是一个尝试的特征列表除以标准.我很容易忽略一些.

新的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
Run Code Online (Sandbox Code Playgroud)

C++ 98/03特征:

numeric_limits
char_traits
iterator_traits
Run Code Online (Sandbox Code Playgroud)


cel*_*vek 8

  • *numeric_limits*绝对表示数字类型的一组特征.
  • 像"CopyAssignable"等所有要求确实是特征,请参阅本文关于特征的内容

    对于其他人,我无法评论,但有疑问时:

    将特征视为一个小对象,其主要目的是携带另一个对象或算法使用的信息来确定"策略"或"实现细节". - Bjarne Stroustrup

    更新:只为霍华德提供的广泛名单做出我的小贡献:

  • 时间相关的特征
  • 正则表达式特征

我错误地认为类型特征正则表达式特征是TR1的一部分在技术上不属于C++ 0x中的新特征束(尽管新的标准已经大大扩展了类型特征).请参阅霍华德的评论和澄清.