В частности, я пытаюсь создать некоторые функции-оболочки вокруг boost :: dynamic_bitset. Есть похожий вопрос, Перегрузка оператора индексации для элементов, не являющихся массивами хотя я надеюсь на более компактное решение без создания дополнительных классов. Соответствующий фрагмент:
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: ошибка: недействительна
инициализация неконстантной ссылки типа
«Подталкивание :: dynamic_bitset<> :: ссылки&’от значения типа
«Подталкивание :: dynamic_bitset<> :: ссылки»
Bitworld :: ссылки& operator [] (int index) {return grid.world [index]; }
^
Я не понимаю, почему они сделали работу с мутирующими операциями над ссылками на прокси настолько нетривиальной. Простое приведение также не будет работать, const_cast не может конвертировать между ссылками rvalue и lvalue, и я не добился большого успеха с static_cast.
Задача ещё не решена.