Utilice punteros de funciones virtuales fuera de la clase para omitir la limitación de privado, por ejemplo:
#include<iostream>
using namespace std;
class B
{
private:
virtual void func()
{
cout << "func" << endl;
}
};
int main()
{
B b;
long *p1 = (long *)&b;
long *p2 = (long *)(*p1);
typedef void(*Func)(void);
Func func = (Func)p2[0];
func();
return 0;
}
El código anterior especula personalmente que no es necesario pasar la llamada de la función virtual en este puntero como la función miembro ordinaria en la clase (esta vista no es necesariamente correcta)