Подозреваю, что это невозможно, но решил спросить. Скажем, у меня есть класс с методом:
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
и создать указатель на функцию, который просто принимает an 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
, поэтому я не могу жестко запрограммировать его таким образом. Это как-то возможно?
Изменить: Должен был упомянуть, что я застрял в земле С++ 03, а также не могу использовать Boost