error: non-const lvalue reference w.r.t. boost::multi_array and foreach
error: non-const lvalue reference w.r.t. boost::multi_array and foreach
所以我创建了一个
boost::multi_array<Tile *, 2> map;
我想
for(auto&i:map) { i->reveal(); }
但是clang/llvm说
error: non-const lvalue reference to type 'sub_array<...>' cannot bind to a
temporary of type 'sub_array<...>'
指向“auto&i
”的“i
”是罪魁祸首。
我看到其他关于类似错误的讨论,但我不确定从这里该何去何从。
N维数组的元素是(N-1)维数组视图
这就是 sub_array<...>
临时的意思。所以,你会想要:
#include <boost/multi_array.hpp>
struct Tile {
void reveal(){}
};
int main() {
boost::multi_array<Tile*, 2> map;
for (auto row: map) {
for (auto& col: row) {
col->reveal();
}
}
}
Note you can also bind to an rvalue-reference (auto&&
) which is perhaps better in the general case, but should not make a difference here.
如果您坚持可以“直接”进入存储后端:
for (size_t i = 0; i< map.num_elements(); ++i) {
map.data()[i]->reveal();
}
但这会破坏抽象(在执行此操作之前,请务必了解步幅、存储顺序、基本偏移量如何组合)。
所以我创建了一个
boost::multi_array<Tile *, 2> map;
我想
for(auto&i:map) { i->reveal(); }
但是clang/llvm说
error: non-const lvalue reference to type 'sub_array<...>' cannot bind to a
temporary of type 'sub_array<...>'
指向“auto&i
”的“i
”是罪魁祸首。
我看到其他关于类似错误的讨论,但我不确定从这里该何去何从。
N维数组的元素是(N-1)维数组视图
这就是 sub_array<...>
临时的意思。所以,你会想要:
#include <boost/multi_array.hpp>
struct Tile {
void reveal(){}
};
int main() {
boost::multi_array<Tile*, 2> map;
for (auto row: map) {
for (auto& col: row) {
col->reveal();
}
}
}
Note you can also bind to an rvalue-reference (
auto&&
) which is perhaps better in the general case, but should not make a difference here.
如果您坚持可以“直接”进入存储后端:
for (size_t i = 0; i< map.num_elements(); ++i) {
map.data()[i]->reveal();
}
但这会破坏抽象(在执行此操作之前,请务必了解步幅、存储顺序、基本偏移量如何组合)。