类和模板伴随类型

时间:2015-08-21 12:56:38

标签: c++ types type-members

我正在学习C ++,偶尔会碰到像“伴侣类型”或某些“机器相关的整体类型”这样的东西,它们会在不同的场合使用,例如:

vector<int>::size_type

std::size_t

或者最近我正在阅读关于IO类型和对象的内容,我读到了一个“由IO类定义”的类型,例如:

istream::iostate

显然是某种用于指示流对象状态的位模式的整数类型。

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

非常感谢!

1 个答案:

答案 0 :(得分:5)

如果标准没有指定某些内容的确切类型,而只是指定它的行为,那么由实现决定他们想要如何处理它。

例如,假设标准表示必须有一个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;
}