私はどこでも探しています (モダン C++ デザイン & co) が、さまざまな引数を受け入れ、さまざまなクラスで動作する一連のコールバックを格納するための良い方法を見つけることができません。これが必要なのは、アプリケーションのすべてのオブジェクトが、そのメソッドの 1 つの実行をClock
、現在の時間を追跡し、適切なタイミングでこのメソッドを呼び出すことができるマスター オブジェクトに延期できるようにするためです。私が目指しているコードは、次のようなものです。
のvoid executeAction1Deferred(int time, int arg1, bool arg2)
メソッドではclass1
、 time は将来必要な実行時間であり、次のようなものがあるはずです。
Clock::defer(time, Class1::action1, this, arg1, arg2);
このClock::defer(??? what signature ????)
タスクを表すオブジェクトでは、時間がキーである優先キューに格納されます。すべてClock
のクォンタムについて、タスクのリストがトラバースされ、このクォンタムで実行する必要があるタスクが実行されます。シングルトンのオブジェクトを意図しているため、「延期」を静的関数として使用したことに注意してください。ただしClock
、メンバー関数にすることもできます。選択の問題です。
void*
可変数の引数を保持するために を使用することを考えましたが、この関数を遅延せずに直接使用するたびに引数の構造体を作成する必要があるため、action1()
メソッドが a を受け入れるのはかなりひどいです。void*
私は過去に何度もこの問題に直面してきましたが、本当に適切な解決策を見つけたことはありません。これは小規模なマルチプラットフォーム プロジェクトであり、経験の浅いプログラマーが拡張できるビルドのシンプルさが不可欠であることに注意してください。ブーストは使用したくありません。ただし、対処するプラットフォームのすべてのコンパイラにはstd::tr1
バインドがあります。問題は、ジェネリック関数のコンテナーを定義する方法です。これらのそれぞれは可変数のパラメーター (最大 N ~ 5) を受け入れ、共通の仮想クラスから派生しないオブジェクトの異なるメンバー メソッドになります。ありがとう