C++ 列出具有私有成员的类的初始化

C++ 列出具有私有成员的类的初始化,c++,c++11,C++,C++11,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; };

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}}};
或者这个:

LimitedLengthList a = {1, {1, 2, 3}};
如(参见ctor 7),您需要提供一个构造函数,该构造函数采用

差不多

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;  
};
class LimitedLengthList
{
公众:
LimitedLengthList(std::initializer_list init,int length=somedefaultval)
:maxLength(length),list(std::move(init)){
LimitedLengthList(int-length):maxLength(length){};
整数运算符[]
等等
私人:
int最大长度;
std::向量表;
};
与(参见ctor 7)类似,您需要提供一个采用

差不多

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;  
};
class LimitedLengthList
{
公众:
LimitedLengthList(std::initializer_list init,int length=somedefaultval)
:maxLength(length),list(std::move(init)){
LimitedLengthList(int-length):maxLength(length){};
整数运算符[]
等等
私人:
int最大长度;
std::向量表;
};
您可以执行以下操作:

LimitedLengthList(int length, std::vector<int> v) :
        maxLength(length),
        list(std::move(v))
    {
        if (list.size() >= maxLength) {
            throw runtime_error("Bad size");
        }
    }
LimitedLengthList(整数长度,标准::向量v):
最大长度(长度),
列表(标准::移动(v))
{
if(list.size()>=maxLength){
抛出运行时_错误(“错误大小”);
}
}
所以
limitedlengthlista={1,0,1,2}将接受此构造函数
并为
{0,1,2}
部分使用向量的初始值设定项列表构造函数。

您可以执行以下操作:

LimitedLengthList(int length, std::vector<int> v) :
        maxLength(length),
        list(std::move(v))
    {
        if (list.size() >= maxLength) {
            throw runtime_error("Bad size");
        }
    }
LimitedLengthList(整数长度,标准::向量v):
最大长度(长度),
列表(标准::移动(v))
{
if(list.size()>=maxLength){
抛出运行时_错误(“错误大小”);
}
}
所以
limitedlengthlista={1,0,1,2}将接受此构造函数

并为
{0,1,2}
部分使用向量的初始值设定项列表构造函数。

向量的初始化不是聚合初始化。它是列表初始化,使用一个构造函数获取一个
std::initializer\u list
@T.C.就是这样,知道这会使我的研究更容易。
vector
的初始化不是聚合初始化。这是列表初始化,使用构造函数获取
std::initializer\u list
@T.C.就是这样,知道这会使我的研究更容易。我会按值而不是按常量ref获取
v
,并执行
list(std::move(v))
。我会按值而不是按常量ref获取
v
,并执行
list(std::move(v))