Перейти к содержанию
    

Перебрать все члены структуры

да я уже написал что хочу сделать.

Это не ЧТО, это КАК. Настоятельно рекомендую понять, что такое union.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я заметил одну интересную особенность. если ответ на пост начинается с конструктивного примера/объяснения то все идет нормально. но если ответ начинается с умничания то все хана - слетаются умники и начинают соревноваться между собой.

вполне себе тема для научного изыскания. надо подбросить какому нибудь психологу.

Изменено пользователем Herz
Грубость

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я заметил одну интересную особенность. если ответ на пост начинается с конструктивного примера/объяснения то все идет нормально. но если ответ начинается с умничания то все хана - слетаются умники и начинают соревноваться между собой.

Вы путаете причину со следствием. Если вопрос осмысленный и корректный, то и ответы на него такие-же (и первый и последующие).

На глупый вопрос можно отвечать или так-же глупо или никак.

 

PS: И чем Вас мой совет про указатели на члены структуры не устраивает?????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И чем Вас мой совет про указатели на члены структуры не устраивает?????

А чего именно указатели а не смещения offsetof() ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы путаете причину со следствием. Если вопрос осмысленный и корректный, то и ответы на него такие-же (и первый и последующие).

На глупый вопрос можно отвечать или так-же глупо или никак.

 

PS: И чем Вас мой совет про указатели на члены структуры не устраивает?????

совет хороший но как его применить. у каждой команды есть своя функция и соответственно свой указатель. я ищу генерик метод подставить указатель по условию. я могу тупо перебрать их все но хочется как то красиво.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

совет хороший но как его применить. у каждой команды есть своя функция и соответственно свой указатель. я ищу генерик метод подставить указатель по условию. я могу тупо перебрать их все но хочется как то красиво.

 

"Сделайте мне красиво" :)

Вот вам в качестве примера кривая реализация функторов на сях. Может подвигнет к размышлениям (а может к очередной порции страданий, что опять все плохо...).

 

//-- pointer to function that performs concrete command processing

struct TCommandFunctor;
typedef int (*PF_CmdProcessor) (const TCommandFunctor* apFunctor);


//-- command functor. encapsulated parameters and a pointer to processing function
struct TCommandFunctor
{
   uint32 arg1;
   uint32 arg2;
   uint8  arg3;
   uint16 arg4;

   PF_CmdProcessor pCmdProcessor;
};


int DoCallFunctor(const TCommandFunctor* apFunctor)
{
   return apFunctor->pCmdProcessor(apFunctor);
}

//-- define command processor functions

int ProcessCmd1(const TCommandFunctor* apFunctor)
{
   uint32 res1 = apFunctor->arg1 + apFunctor->arg2;
   return (res1 > 733);
}

int ProcessCmd2(const TCommandFunctor* apFunctor)
{
   //-- do something else
   uint32 res1 = apFunctor->arg3 > apFunctor->arg1;
   return res1;
}

//-- define and populate functors
TCommandFunctor cmdFunctors[2] = 
{
   {1, 2, 3, 4,  ProcessCmd1}, 
   {11,22,23,24, ProcessCmd2} 
};

void DoWhatever()
{
   for(int i=0; i<2; ++i)
   {
       DoCallFunctor(&cmdFunctors[i]);
   }

}

Изменено пользователем CrimsonPig

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Сделайте мне красиво" :)

Вот вам в качестве примера кривая реализация функторов на сях. Может подвигнет к размышлениям (а может к очередной порции страданий, что опять все плохо...).

 

//-- pointer to function that performs concrete command processing

struct TCommandFunctor;
typedef int (*PF_CmdProcessor) (const TCommandFunctor* apFunctor);


//-- command functor. encapsulated parameters and a pointer to processing function
struct TCommandFunctor
{
   uint32 arg1;
   uint32 arg2;
   uint8  arg3;
   uint16 arg4;

   PF_CmdProcessor pCmdProcessor;
};


int DoCallFunctor(const TCommandFunctor* apFunctor)
{
   return apFunctor->pCmdProcessor(apFunctor);
}

//-- define command processor functions

int ProcessCmd1(const TCommandFunctor* apFunctor)
{
   uint32 res1 = apFunctor->arg1 + apFunctor->arg2;
   return (res1 > 733);
}

int ProcessCmd2(const TCommandFunctor* apFunctor)
{
   //-- do something else
   uint32 res1 = apFunctor->arg3 > apFunctor->arg1;
   return res1;
}

//-- define and populate functors
TCommandFunctor cmdFunctors[2] = 
{
   {1, 2, 3, 4,  ProcessCmd1}, 
   {11,22,23,24, ProcessCmd2} 
};

void DoWhatever()
{
   for(int i=0; i<2; ++i)
   {
       DoCallFunctor(&cmdFunctors[i]);
   }

}

спасибо. попробую разобраться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чего именно указатели а не смещения offsetof() ?

Без разницы, можно и это. Только вряд-ли это поможет пациенту. Он упорно не хочет открывать учебник....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если хочется перебирать единообразно все злементы структуры... замените структуру на массив и перебирайте сколько душе угодно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...