0

特别是我试图围绕 boost::dynamic_bitset 创建一些包装函数。有一个类似的问题,Overloading subscript operator for non-array elements尽管我希望在不创建额外类的情况下获得更紧凑的解决方案。相关片段:

typdef boost::dynamic_bitset<> BitWorld;
class Game{
    struct Grid{
        int size;
        BitWorld world;
    } grid;
public:
    BitWorld::reference& operator()(int x, int y) { return grid.world[x+y*grid.size]; }
    BitWorld::reference& operator[](int index) { return grid.world[index]; }
}

使用 MSVC13_64 这不会给我任何错误,尽管它在测试时会产生非常奇怪的行为,使用 MinGW492_32 我会收到如下错误:

C:\repositories\..\logic\game_prim.h:78: 错误:从 'boost::dynamic_bitset<> 类型的右值对 'boost::dynamic_bitset<>::reference&' 类型的非常量引用的初始化无效::reference' BitWorld::reference& operator[](int index) { return grid.world[index]; } ^

我不明白为什么他们让代理引用上的变异操作变得如此重要。简单的转换也不起作用, const_cast 不能在右值和左值引用之间转换,我也没有在 static_cast 上取得太大的成功。

4

0 回答 0