如何为自己的类型声明自定义char_traits<>?

How do I declare a custom char_traits<> for my own type?

本文关键字:traits lt gt char 自己的 类型 自定义 声明      更新时间:2023-10-16

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

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

  2. 标准说要保持traits::eof()和有效的代码点分开,因此要求使用比char_type大的int_type。但是,我可以将我的char_type作为签名数字,其中我知道有效的代码点仅在非负范围内。它使我拥有负值作为traits::eof()的可能值。还是应该是int_type应该是char_type的适当超集,以便没有char_type可以拿出eof()的值?更重要的是,我可以使int_typechar_type相同吗?

  1. std::fpos是一个封装文件流的文件定位语义的类。它使用当前的转换状态来识别文件位置。off_typepos_typestd::char_traits中定义的类型,分别是偏移类型和位置类型的类型。pos_type被用作寻求函数的参数,是从告诉功能返回的类型。它是表示绝对位置的类型。off_type用于Seek功能的过载中,用于从提供的文件位置指定偏移。

    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仅能表示类型char_type的值以及eof()值。它没有针对std::char_traits

  3. 的某些专业化类型的类型的其他要求定义其他要求。