Мне нужно объявить «вещь», которая будет содержать список указателей на функции, и мне нужно будет обращаться к ним обоими способами:
Непосредственно призываю к function.myStructVar.attr1
Перебирая их как бы vector.myStructVar.vec[1]
Поэтому я подумал: «struct + union — это мое решение». Я объявлю struct со всеми необходимыми мне переменными, а затем объединение со структурой и вектором указателей для работы.
Но все стало сложнее. Теперь вместо указателей на функции я хочу смешивать указатели на функции с контейнерами указателей на функции. (Я знаю, это странно, и мне не очень понятно: S)
Возобновление: Я хочу иметь группировку (указатели для работы и группировки указателей для работы). И я хочу иметь возможность получить к ним доступ таким образом, чтобы мне не нужно было знать, как они структурированы.
Является ли это возможным? как?
Конечная цель:
Я хотел бы иметь такие объекты, как:
Objecta:
-Eat Apple
-Eat Bannana
--DoDigestion(this is a:
-->DigestApple
-->DigestBannana
-->AddAcid
)
ObjectB:
-Eat Potato
-Eat Bannana
--DoDigestion(this is a:
-->DigestBannana
-->AddWater
)
В конце, идея состоит в том, чтобы определить какую-то спецификацию того, что будет сделано, и отправить ее в функцию, которая будет делать:
Исполнитель:
void execute(Object):
foreach(Action a in Object) do(a);
foreach(GroupOfAction g in Object) execute(g);
Простое решение состоит в том, чтобы превратить ваш GroupOfAction
в Action
сам. Затем дайте «вещь», которую вы ищете GroupOfAction
, который теперь может содержать подгруппы.
C ++ 11 уже имеет «Action
» учебный класс, std::function<void(void)>
, Так:
typedef std::function<void(void)> Action;
typedef std::list<Action> GroupOfAction;
Action Group(GroupOfAction const& list)
{
return [list](){ for (Action& a : list) { a(); } }
}
Других решений пока нет …