如何声明自定义char_traits<>对于我自己的类型?

时间:2014-01-27 21:17:57

标签: c++ iostream streambuf

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

  1. 预期fpos_typeoff_typestate_type是什么?他们需要在哪里,如果有的话?

  2. 标准说保持traits::eof()和有效代码点分开,因此要求使用大于int_type的{​​{1}}。但是我可以将char_type作为带符号的数字,我知道有效代码点只在非负范围内。它给我留下负值作为char_type的可能值。或者traits::eof()应该是int_type的正确超集,以便char_type不能取char_type的值?更重要的是,我可以让eof()int_type相同吗?

1 个答案:

答案 0 :(得分:0)

  1. std::fpos是一个封装文件流的文件定位语义的类。它使用当前转换状态来标识文件位置。 off_typepos_typestd::char_traits中定义的类型,分别是偏移类型和位置类型的类型。 pos_type用作查找函数的参数,是tell函数返回的类型。它是表示绝对位置的类型。 off_type用于搜索函数的重载,用于指定从提供的文件位置开始的偏移量。

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

    您可以在[char.traits.require]

  2. 中查找这些类型的所有要求
  3. 这是traits::int_type - [char.traits.typedef]

    的定义
    typedef INT_T int_type
    
         

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

    这个定义带有int_type仅能够表示char_type类型值以及eof()值的含义。除了std::char_traits

  4. 的某些特化的别名类型之外,它没有为该类型定义任何其他要求