これは無理だと思いますが、聞いてみようと思いました。メソッドを持つクラスがあるとします。
class A {
public:
void b(int c);
};
そのメンバー関数へのポインターを作成できます。
void (A::*ptr)(int) = &A::b;
(someAInstance.*ptr)(123);
関数ポインターを悪用して、A
引数を直接受け取るポインターを作成することもできます (これが安全かどうかはわかりませんが、私のマシンでは動作します)。
void (*ptr2)(A*, int) = (void (*)(A*, int))&A::b;
(*ptr2)(&someAInstance, 123);
私が望むのは、どうにかしてA
引数をカリー化し、 だけを受け取るが、定義済みの特定のインスタンスでメソッドをint
呼び出す関数ポインターを作成することです。インスタンスはその特定の関数ポインターに対して一定のままですが、すべて同じメソッドを指しているが異なるインスタンスを使用しているいくつかの関数ポインターが存在する場合があります。たとえば、別のラッパー関数を作成できます。A::b
A
A
A::b
A
A* someConstantA = new A;
void wrapper(int c) {
someConstantA->b(c);
}
void (*ptr3)(int) = &wrapper;
これで、呼び出しをディスパッチするptr3
特定のものを知らなくても使用できますが、それを処理する特別な関数を定義する必要がありました。任意の数のインスタンスA
のポインターを作成する方法が必要なので、そのようにハードコードすることはできません。A
これは何らかの形で可能ですか?
編集:言及する必要がありましたが、私はC ++ 03の土地に閉じ込められており、Boostも使用できません