Я подозреваю, что это невозможно, но подумал, что спросить. Скажем, у меня есть класс с методом:
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
экземпляра I предопределено Экземпляр 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