【发布时间】:2014-07-15 07:14:53
【问题描述】:
std::vector 允许列表初始化如下:
std::vector a = {1, 2, 3, 4};
据我所知,std::vector 的底层成员是私有的,您可以像a.data() 一样访问数据数组,但实际成员是private。正确,如果我错了,我。
那么我怎样才能在我自己的班级中模仿这一点呢?我知道如果您的成员是公开的,您可以这样做:
class A
{
public:
std::vector<int> a;
std::map<int, int> b;
};
A a = {{1, 2, 3, 4}, {{1, 2}, {3, 4}}};
但是假设我有以下一个简单的类,它有一个私有成员,就像一个向量说例如:有限长度列表
class LimitedLengthList
{
LimitedLengthList(int length) : maxLength(length){};
int operator[]
etc etc
private:
int maxLength;
std::vector<int> list;
};
如何将其公开给聚合初始化并对其施加诸如最大长度之类的制裁?有没有可能做这样的事情:
LimitedLengthList a(5) = {1, 2, 3};
或者这个:
LimitedLengthList a = {1, {1, 2, 3}};
【问题讨论】:
-
vector的初始化不是聚合初始化。它是列表初始化,使用带有std::initializer_list的构造函数。 -
@T.C.就是这样,知道这会让我的研究更容易。