我想为自己的类型创建一个自定义char_traits
类。我已经声明了所有的功能,但是我对标准中给出的模糊语义感到困惑。
预期fpos_type
,off_type
和state_type
是什么?他们需要在哪里,如果有的话?
标准说保持traits::eof()
和有效代码点分开,因此要求使用大于int_type
的{{1}}。但是我可以将char_type
作为带符号的数字,我知道有效代码点只在非负范围内。它给我留下负值作为char_type
的可能值。或者traits::eof()
应该是int_type
的正确超集,以便char_type
不能取char_type
的值?更重要的是,我可以让eof()
和int_type
相同吗?
答案 0 :(得分:0)
std::fpos
是一个封装文件流的文件定位语义的类。它使用当前转换状态来标识文件位置。 off_type
和pos_type
是std::char_traits
中定义的类型,分别是偏移类型和位置类型的类型。 pos_type
用作查找函数的参数,是tell函数返回的类型。它是表示绝对位置的类型。 off_type
用于搜索函数的重载,用于指定从提供的文件位置开始的偏移量。
state_type
也在std::char_traits
中定义。它用于指定多字节序列的转换状态。
您可以在[char.traits.require]
。
这是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