如何解决如何创建对数组的引用和boost :: array或不必要的想法?
| 我有int valA[3] = {290,340,390};
int valB[3] = {160,200,240};
boost::array<myStruct,4> myStructA = {{{250,8},{170,{70,{30,3}}};
boost::array<myStruct,4> myStructB = {{{50,4},{110,6},{220,{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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。