Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрепить обращение к конкретному члену union'a 
:(
    Опции темы
flagist0
Дата 25.7.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.10.2007

Репутация: нет
Всего: нет



Во избежание выравнивания, структура объединена в унионе с массивом размера структуры. Обращений к массиву не происходит, но к структуре все равно приходится обращаться в стиле union->struct.someprop, что сильно снижает читаемость. Есть ли метод закрепить доступ к конкретному члену юниона (очень желательно без макросов, по причине той же читаемости)?
PM MAIL GTalk   Вверх
flagist0
Дата 25.7.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.10.2007

Репутация: нет
Всего: нет



Проявился вариант, можно переопределить оператор -> union'а. 
Но как? mystruct* operator->(){return &mystruct_union_member;} компилируется, но при попытке обращения через стрелку напрямую к члену структуры выдается 'has no member blah'

Это сообщение отредактировал(а) flagist0 - 25.7.2008, 11:38
PM MAIL GTalk   Вверх
HappyLife
Дата 25.7.2008, 17:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



Код

union Union
{
struct Struct
{
        int i;
} s;
Struct * operator->(){return &s;};
} u;

int main(int argc, char* argv[])
{
        u->i = 10;

        return 0;
}


Работает.
PM MAIL   Вверх
jonie
Дата 25.7.2008, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Цитата

Во избежание выравнивания, структура объединена в унионе с массивом размера структуры
а как это предотвращает выравнивание полей структуры?

идея как я понимаю такая(пример):
Код

union {
    struct {
        char c;
        int a;
    }st;

    char _arr[sizeof(int)+sizeof(char)];
}su;

printf("%d", sizeof(su)); //далеко не факт что тут будет 5. скорее всего будет 8 (на х86)....



//хотя наверно имеется в виду такое:
// (но лично у меня такая структура с выравниваем 8 занимает 8 байтов...)...
union {
    struct {
        char c[4];
        int a;
    }st;

    int _arr[2];
}su;



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0824 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.