类和模板配套类型

classes and templates companion types

本文关键字:类型      更新时间:2023-10-16

我正在学习c++,时不时地我碰到一些类似于"伴侣类型"或一些在不同场合使用的"与机器相关的积分类型"的东西,例如:

vector<int>::size_type

std::size_t

或者最近我读到关于IO类型和对象的内容我读到一种"由IO类定义"的类型,例如:

istream::iostate

,显然是一个整型,由某种用于指示流对象状态的位模式使用。

我知道类可以包含类型成员(除了成员函数和数据成员),以类型别名声明的形式(typedefusing别名声明),但这对我来说完全没有意义,一定有我还没有读到的东西。你能解释一下吗?

非常感谢!

如果标准没有指定某些东西的确切类型,而只是指定它的行为,则由实现决定如何处理它。

例如,标准规定必须有一个类Foo同时也有一个类foo_t。这个foo_t需要能够表示一定范围的整数值,但它并没有说它们必须是固定大小(像std::int32_t)。在我的实现中,我只需要输入

class Foo
{
public:
    using foo_t = long;
};

那么这个类的用户就不需要知道foo_t实际上是long的内部结构,他们也不应该依赖于所有编译器都是真的(因为其他人可能选择以不同的方式实现它)。他们只知道foo_t能够保存一定范围的整数值,这是基于c++标准所规定的。

int main()
{
    Foo::foo_t x = 10;
    std::cout << x;
}