ライブラリの場合、関数が別の関数とその引数を受け入れ、後で呼び出すためにそれらをすべて保存するようにします。引数は型の任意の混合を許可する必要がありますが、関数はvoidを返すだけで済みます。このようなもの:
void myFunc1(int arg1, float arg2);
void myFunc2(const char *arg1);
class DelayedCaller
{ ...
public:
static DelayedCaller *setup(Function func, …);
};
...
DelayedCaller* caller1 = DelayedCaller::setup(&myFunc1, 123, 45.6);
DelayedCaller* caller2 = DelayedCaller::setup(&myFunc2, "A string");
caller1->call(); // Calls myFunc1(), with arguments 123 and 45.6
caller2->call(); // Calls myFunc2(), with argument "A string"
1つのアプローチは、DelayedCaller :: setup()にstd :: functionを受け入れさせ、私のライブラリユーザーにsetup()を呼び出す前にstd :: bind()を使用させることです。ただし、ユーザーが自分でバインディングを行う必要がないようにsetup()を実装する方法はありますか?
編集:DelayedCallerは既存のクラスです。setup()は、追加したい新しい静的メソッドです。