【问题标题】:How do I declare a custom char_traits<> for my own type?如何为我自己的类型声明自定义 char_traits<>?
【发布时间】:2014-01-27 21:17:56
【问题描述】:

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

  1. fpos_typeoff_typestate_type 应该做什么?如果需要的话,它们在哪里需要?

  2. 标准规定将traits::eof() 和有效代码点分开,因此要求使用大于char_typeint_type。但是我可以将我的char_type 设置为有符号数,我知道有效代码点仅在非负范围内。它给我留下了负值作为traits::eof() 的可能值。或者int_type 应该是char_type 的正确超集,这样char_type 就不能取eof() 的值?更重要的是,我可以让int_typechar_type 相同吗?

【问题讨论】:

    标签: c++ iostream streambuf


    【解决方案1】:
    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 只能表示char_type 类型的值,以及eof() 值。除了为 std::char_traits 的某些特化指定别名之外,它没有对类型定义进一步的要求

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多