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

| 我有
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;
(模板参数是类型的一部分,而不是变量名称)。 另外,它还必须是ѭ8或等效值,因为在您的示例代码中,您打算在其范围之外使用ѭ5。
对于数组,语法为
int (&val)[3] = valA;
对于像ѭ11这样的UDT,它只是
boost::array<myStruct, 4>& myStruct = myStructA;
那是行不通的:在ѭ13之后,references5和ѭ15不再适用。 您可以使用条件运算符:
int (&val)[3] = useA ? valA : valB;
boost::array<myStruct, 4>& myStruct = useA ? myStructA : myStructB;

要回复问题请先登录注册