我有一个结构,我想初始化这样的:如何聚合 - 初始化这个结构?
checkPoints someCheckpoints = {
{
mPosition(10, 18),
mPosition(15, 20),
},
{
mPosition(45, 80),
mPosition(95, 105),
}
};
基本上的位置的矢量矢量使用初始化聚合。
这是工作没有问题:
std::vector<PosVec> someCheckpoints = {
{
mPosition(10, 18),
mPosition(15, 20),
},
{
mPosition(45, 80),
mPosition(95, 105),
}
};
不过,我需要为了增加一些额外的功能使用结构。
我的代码:
struct mPosition {
mPosition(int32_t x, int32_t y) : x(x), y(y) {}
int32_t x;
int32_t y;
};
typedef std::vector<mPosition> PosVec;
struct checkPoints {
explicit checkPoints(std::vector<PosVec>& checkPoints) {
checkPointsVec = checkPoints;
};
const PosVec& getRandom() const {
return checkPointsVec[getRandomInt(0, checkPointsVec.size())];
}
std::vector<PosVec> checkPointsVec;
};
checkPoints someCheckpoints = { // no matching constructor
{
mPosition(10, 18),
mPosition(15, 20),
},
{
mPosition(45, 80),
mPosition(95, 105),
}
};
这是生产no matching constructor
错误。我希望它使用一个适当的向量类聚合构造函数。我的结构应该扩展向量类 而不是我能否做到这一点声明我自己的构造函数(哪一个)?
我该如何解决这个问题?
随着'explicit',这将是'关卡someCheckpoints {..}'(无'=') – Jarod42
并用'VECTOR'需要额外的大括号,'initializer_list'可以避免这种情况。 – Jarod42
不幸的是,添加'const'并不能解决问题。关于'explicit',我可以使用'{..}'和'= {..}'。我使用它,因为单个参数构造函数应该被标记为避免无意的隐式转换。 – Kesse