Это некрасиво, непереносимо, жестоко и т. Д., Но, возможно, что-то в этом общем порядке будет полезно:
#include <iostream>
struct A {
virtual void a() {}
virtual void b() {}
virtual void c() {}
};
int main() {
A a;
typedef void (A::*ptr)();
union see_bits {
ptr p;
int i;
};
see_bits x, y, z;
x.p = &A::a;
y.p = &A::b;
z.p = &A::c;
std::cout << x.i << "\n";
std::cout << y.i << "\n";
std::cout << z.i << "\n";
return 0;
}
Чтобы быть немного более переносимым, вам, вероятно, следует использовать массив unsigned char в качестве второго элемента объединения - распечатка этого со смыслом добавит немного больше работы, которую я оставлю вам (в хотя бы пока).