Через функцию указатель на член, boost вызывает частные функции. Функция-член класса создает указатель и передает его в boost, а затем boost использует этот указатель для вызова закрытой функции объекта класса.
Вот одна простая иллюстрация этой основной идеи:
class A;
typedef void (A::*pf)();
class A
{
public:
pf get_ptr() { return &A::B; } //member function creates the pointer
private:
void B() { cout << "called private function" << endl; }
};
int main() {
A a;
pf f = a.get_ptr();
(a.*f)();
return 0;
}
Выход:
называется частной функцией
Хотя он не использует повышение, но основная идея именно в этом.
Обратите внимание, что только функции-члены и friend
могут создавать указатель на private
функцию-член. Другие не могут его создать.
Демонстрация на ideone: http://ideone.com/14eUh