如何创建对数组和boost::array的引用(或不必这样做的想法)

How to create a reference to arrays and boost::array (or ideas to not have to)?

本文关键字:引用 不必 这样做 array boost 何创建 创建 数组      更新时间:2023-10-16

我有

int valA[3] = {290, 340, 390};
int valB[3] = {160, 200, 240};
boost::array<myStruct, 4> myStructA = {{{250,8}, {170,8}, {70,8}, {30,3}}};
boost::array<myStruct, 4> myStructB = {{{50,4}, {110,6}, {220,6}, {270,8}}};

和我想要避免复制和粘贴时,做以下:

if(useA) {
  // do a lot with valA and myStructA
}
else {
  // do a lot with valB and myStructB
}
所以我们的想法是这样的(警告,里面没有工作代码):
if(useA) {
  int &val[3] = valA;
  boost::array &myStruct<myStruct, 4> = myStructA;
}
else {
  int &val[3] = valB;
  boost::array &myStruct<myStruct, 4> = myStructB;
}
// do a lot with val and myStruct

有办法吗?还是一般的方法不好,有一个更干净的解决方案?

我知道规则"没有引用的数组",但这应该是一个数组的引用…还是最终都是一样的?

谢谢你的帮助!

int (&val)[3] = valA;

(您需要&指的是val而不是int)。

boost::array<myStruct, 4> &myStruct = myStructA;

(模板参数是类型的一部分,而不是变量名)。

还需要是int (&val)[3] = useA ? valA : valB;或等效的,因为在您的示例代码中,您计划在其作用域之外使用val

对于数组,语法为

int (&val)[3] = valA;

对于像boost::array这样的UDT,它只是

boost::array<myStruct, 4>& myStruct = myStructA;

这不起作用:在if之后,valmyStruct不再在范围内。

可以使用条件运算符:

int (&val)[3] = useA ? valA : valB;
boost::array<myStruct, 4>& myStruct = useA ? myStructA : myStructB;