0

我需要声明一个包含函数指针列表的“事物”,并且需要以两种方式访问​​它们:

  • 直接调用function.myStructVar.attr1

  • 循环通过它们,因为它是vector.myStructVar.vec[1]

因此,我想:“struct + union 是我的解决方案”我将声明一个包含我想要的变量的结构,然后声明一个与该结构和一个函数指针向量的联合。

但事情变得更加复杂了。现在,我想将指向函数的指针与指向函数的指针容器混合在一起,而不是只有指向函数的指针。(我知道,这很奇怪,我不太清楚:S)

恢复:我想要一组(指向函数的指针和指向函数的指针分组)。而且我希望能够以一种我不需要知道它们的结构的方式访问它们。

可能吗?如何?

最终目标:我想要这样的对象:

对象A:

-Eat Apple
-Eat Bannana
--DoDigestion(this is a:
-->DigestApple
-->DigestBannana
-->AddAcid
)

对象B:

-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);
4

1 回答 1

1

简单的解决方案是把你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(); } }
}
于 2012-10-24T17:08:27.560 回答