私はEntity Component Systemライブラリで学習目的で作業しています。私はデザインに大きな変更を加えようとしています。Q:同じ配列内に異なる型のstd :: function
私はclass System
を1つでupdate
に分割して、いくつかのupdate
関数を呼び出します。しかし、これらの機能は何でもかまいません。だから私は多くの異なるstd::function
タイプで終わった。
性能上の理由から、私は実際にtuple
を使用したくありません(または、それは本当に効率的です、私に教えてください)。 std::array
を使用したいのですが、どのようにすべての種類のstd::function
を一緒に入れることができますか?実際にはstruct
にはstd::function
が含まれていますが、そのためにstruct
に同じタイプの問題が発生します。
配列がコンパイル時に生成できる場合は、(引数なし)が最適です。
どのように動作させたいかを示すイラスト(実際のコードではありません)があります。とにかく
//Function to add a function in the list [[Call by User]]
addSystemBloc<Position, Speed>(function(ArgIDontKnow, Position, Speed), otherThings);
//Function to generate a structure (probably a graph) linked to the array
generateGraph();
//Inside the initialization of the System using the function we just add [[ Call by User ]]
addArgument(id, arg); //id is not really nice, and this guy know the function he wants to add an arg (with std::bind)
//Somwhere in the main loop [[ Call by Library ]]
invoke(func, Position, Speed);
おかげ
異なるタイプの配列が必要ですか?できません。配列のすべての要素は同じです。どのようなパフォーマンス上の問題がタプルについて心配していますか?タプルはオーバーヘッドがありません。 –
どのようにこれらの関数の型を発見して呼び出すことができますか? (それぞれの位置が固定タイプの場合はそれがタプルです) – molbdnilo
おそらく[Boost variant](http://www.boost.org/doc/libs/1_63_0/doc/html/variant.html)または[Boost any] (http://www.boost.org/doc/libs/1_63_0/doc/html/any.html)(あるいは今後登場する標準ライブラリの変種['std :: variant'](http://en.cppreference。 com/w/cpp/utility/variant)と['std :: any'](http://en.cppreference.com/w/cpp/utility/any)を参照してください)。しかし、私は本当にそれらをお勧めします、代わりに私はむしろ(まだあなたはそれに取り組んでいる)あなたのデザインを再考しようとすることをお勧めしたいと思います。 –