Re[4]: доступ к элементам структуры
От: bookevg  
Дата: 30.05.07 11:29
Оценка:
Здравствуйте, Максим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, при этом не работает доступ к элементам
...
М>    };
М>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.