如何创建对数组和boost::array的引用(或不必这样做的想法)
How to create a reference to arrays and boost::array (or ideas to not have to)?
我有
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
之后,val
和myStruct
不再在范围内。
你可以使用条件运算符:
int (&val)[3] = useA ? valA : valB;
boost::array<myStruct, 4>& myStruct = useA ? myStructA : myStructB;
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 如何使用基类指针引用派生类成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 如何创建对数组和boost::array的引用(或不必这样做的想法)