1

我想char_traits为我自己的类型创建一个自定义类。我已经声明了所有功能,但我对标准中给出的模糊语义有些困惑。

  1. 是什么fpos_type,期望做什么off_typestate_type如果需要的话,它们在哪里需要?

  2. 标准说要保持traits::eof()和有效代码点分开,因此要求使用int_type大于char_type. 但是我可以将我的char_type作为有符号数字,我知道有效代码点仅在非负范围内。它给我留下了负值作为可能的值traits::eof()。或者它int_type应该是一个适当的超集,char_type所以没有char_type人可以取 的值eof()?更重要的是,我可以做int_typechar_type一样吗?

4

1 回答 1

0
  1. std::fpos是一个封装文件流的文件定位语义的类。它使用当前的转换状态来识别文件位置。off_typepos_type是分别定义std::char_traits为偏移类型和位置类型的类型。pos_type用作 seek 函数的参数,是 tell 函数返回的类型。它是一种表示绝对位置的类型。off_type在查找函数的重载中使用,以指定与提供的文件位置的偏移量。

    state_type也定义在std::char_traits. 它用于指定多字节序列的转换状态。

    您可以在 中查找这些类型的所有要求[char.traits.require]

  2. 这是traits::int_type-的定义[char.traits.typedef]

    typedef INT_T int_type
    

    对于某个字符容器类型char_type,相关容器类型INT_T应该是一个类型或类,它可以表示从对应char_type值转换而来的所有有效字符,以及一个文件结束值,eof()。该类型int_type表示一个字符容器类型,它可以保存文件结尾以用作 iostream 类成员函数的返回类型。

    这个定义意味着int_type只能表示 typechar_type的值,也可以表示eof()值。它没有为类型定义进一步的要求,除了它为某些专业化别名的类型std::char_traits

于 2014-01-30T23:32:52.757 回答