C++ 如何为具有代理引用的类编写非常量getter函数?

C++ 如何为具有代理引用的类编写非常量getter函数?,c++,wrapper,proxy-classes,boost-dynamic-bitset,C++,Wrapper,Proxy Classes,Boost Dynamic Bitset,特别是,我试图围绕boost::dynamic_位集创建一些包装函数。还有一个类似的问题,尽管我希望在不创建额外类的情况下获得更紧凑的解决方案。相关片段: typdef boost::dynamic_bitset<> BitWorld; class Game{ struct Grid{ int size; BitWorld world; } grid; public: BitWorld::reference& opera

特别是,我试图围绕boost::dynamic_位集创建一些包装函数。还有一个类似的问题,尽管我希望在不创建额外类的情况下获得更紧凑的解决方案。相关片段:

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]; }
}
typdef boost::dynamic_bitset BitWorld;
班级游戏{
结构网格{
整数大小;
比特世界;
}网格;
公众:
BitWorld::引用和运算符()(intx,inty){return grid.world[x+y*grid.size];}
BitWorld::引用和运算符[](int-index){return grid.world[index];}
}
对于MSVC13_64,这不会给我任何错误,尽管它在测试时会产生非常奇怪的行为,但对于MinGW492_32,我会得到如下错误:

C:\repositories\..\logic\game\u prim.h:78:错误:无效 初始化类型为的非常量引用 来自类型为的右值的'boost::dynamic_bitset::reference&' 'boost::dynamic_位集::reference' BitWorld::引用和运算符[](int-index){return grid.world[index];} ^


我不明白他们为什么对代理引用进行变异操作如此重要。简单的强制转换也不起作用,const_cast无法在右值和左值引用之间转换,我也没有在静态强制转换中取得太多成功。

我会尝试将它们分配给右值引用,或者等待。.是的,它可以完美地工作,以及std::vector::reference。我错误地理解了什么是代理引用,它实际上是一个引用;另一个答案让我有点困惑。谢谢