gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:56:07 25 4
gpt4 key购买 nike

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

  1. fpos_typeoff_typestate_type 应该做什么?哪里需要它们(如果有的话)?

  2. 标准表示要将 traits::eof() 和有效代码点分开,因此要求使用大于 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 用作 seek 函数的参数,是 tell 函数返回的类型。它是一种表示绝对位置的类型。 off_type 在搜索函数的重载中用于指定从提供的文件位置的偏移量。

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

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

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

    typedef INT_T int_type

    For a certain character container type char_type, a related container type INT_T shall be a type or class which can represent all of the valid characters converted from the corresponding char_type values, as well as an end-of-file value, eof(). The type int_type represents a character container type which can hold end-of-file to be used as a return type of the iostream class member functions.

    这个定义意味着 int_type 只能表示 char_type 类型的值,还有 eof()值(value)。除了它为 std::char_traits

  3. 的特定特化起别名之外,它没有定义对该类型的进一步要求

关于c++ - 如何为我自己的类型声明自定义 char_traits<>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21391875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com