在std::vector允许列表初始化像下面这样:
std::vector a = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)
据我所知,底层成员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}}};
Run Code Online (Sandbox Code Playgroud)
但是我说我有一个简单的类,它有一个私有成员,就像一个向量说例如:有限长度列表
class LimitedLengthList
{
LimitedLengthList(int length) : maxLength(length){};
int operator[]
etc etc
private:
int maxLength;
std::vector<int> list;
};
Run Code Online (Sandbox Code Playgroud)
我如何将其暴露于聚合初始化并对其施加最大长度等制裁?有可能做这样的事情:
LimitedLengthList a(5) = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
或这个:
LimitedLengthList a = {1, {1, 2, 3}};
Run Code Online (Sandbox Code Playgroud)
喜欢std::vector(参见ctor 7),你需要提供一个带有的构造函数std::initializer_list.
就像是
class LimitedLengthList
{
public:
LimitedLengthList(std::initializer_list<T> init, int length = somedefaultval)
: maxLength(length), list(std::move(init)) {}
LimitedLengthList(int length) : maxLength(length){};
int operator[]
etc etc
private:
int maxLength;
std::vector<int> list;
};
Run Code Online (Sandbox Code Playgroud)