Здравствуйте, Максим2006, Вы писали:
М>Здравствуйте, bookevg, Вы писали:
B>>Здравствуйте, Максим2006, Вы писали:
М>>>Здравствуйте, bookevg, Вы писали:
М>>>Можно завести вспомогательные классы, правда тогда регистровое представление функцией нужно сделать (у меня так получилось, но возможны варианты).
B>>Вроде все получается, но вот только расход памяти большой: для 16=тиразрядного числа: 16 * 4байта * 4указателя(при 32-хразрядных указателях) + 2байта (само число) = 258 — для моего арм-процессора это много. Таких регистров м.б. 250 штук.
М>Это ведь непрямой путь к цели. Тут неизбежны накладные расходы. Прямой путь — это ввод методов по установке флагов. Кое-что можно перенести на рантайм, но это уже хаки по-любому.
М>М> struct StatusData
М> {
М> private:
М> void SetStatus(unsigned status) { m_DataUnion.dataBit.nStatus = status; }
М> unsigned GetStatus() { return m_DataUnion.dataBit.nStatus; }
...
М> private:
М> struct StatusField
М> {
М> void operator=(unsigned ready) { pThis()->SetStatus(ready); }
М> operator unsigned() { return pThis()->GetStatus(); }
М> private:
М> StatusData* pThis() {
М> StatusField StatusData::* pmem = &StatusData::Status;
М> return (StatusData*)((__int64)(this) - *(__int64*)&pmem);
М> }
М> };
У меня арм-процессор с 32разр.шиной, посему поменял __int64 на __int32, при этом не работает доступ к элементам
...
М> };
М>