Для обсуждения
Иногда возникает неудержимое желание (у начинающих программистов на С++) передать куда-то вне класса адрес функции-члена этого класса и затем вызывать ее, не привязываясь к объектам этого класса.
Например:
class A
{
public:
void func(void);
};
A aa;
void (*ptr)(void)=aa.func;
ptr(); -- - без указания объекта класса
НО!!!!!
Почему компилятор каждый раз старательно (и даже с каким-то садистским удовольствием) бьет нас по рукам? Предположим, что func работает с какой-то локальной переменной v1, которая создается в стеке, и переменной-членом класса А v2. В действительности, когда func обращается к v2 происходит обращение к *this.v2 (this->v2), где this - первый неявный параметр func. this - указатель на объект класса А - область памяти, где лежат все переменные какого-то конкретного экземпляра (объекта). Но Для Всех экземпляров функция func имеет один и тот-же адрес, так как ее код создается компилятором только один раз. Поэтому сама функция не имеет понятия об окружающем мире, разве только через this. Если вы хотите использовать адрес функции без
привязки к объекту необходимо сгенерировать параметр this вручную - поместить некий осмысленный адрес в стек при передаче параметров перед вызовом func. Это не так уж и просто.
Теперь о поводу v1. С ней все просто. Она создается в стеке, указатель на текущее положение в котором также передается в любую функцию. Поэтому с локальными переменными в случае приведенного выше жульничества проблем не должно быть.