0

関数へのポインタのリストを含む「もの」を宣言する必要があり、両方の方法でそれらにアクセスする必要があります。

  • に直接電話するfunction.myStructVar.attr1

  • それがそうであったようにそれらをループしますvector.myStructVar.vec[1]

したがって、私は「構造体+共用体が私の解決策です」と考えました。必要な変数を使用して構造体を宣言し、その後、構造体と関数へのポインターのベクトルを使用して共用体を宣言します。

しかし、物事はより複雑になっています。関数へのポインターだけではなく、関数へのポインターと関数へのポインターのコンテナーを混在させたいと思います。(私は知っています、それは奇妙で、私は本当に明確ではありません: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);
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 に答える