Несмотря на то, что vtables - это способ, которым большинство (возможно, все) реализаций C++ реализуют диспетчеризацию виртуальных функций, нет гарантии, что они даже существуют в стандарте, а тем более что они находятся в определенном порядке.
Другими словами, единственный способ узнать - взять ваш конкретный компилятор, узнать, как он упорядочивает vtable, а затем следовать тому же алгоритму, основанному на макете класса, чтобы найти индекс для интересующей вас функции в.
Или иначе используйте невероятно взломанные для платформы хаки, чтобы получить фактический адрес функции-члена, найти виртуальную таблицу в памяти и найти адрес внутри.
Но в любом случае такая информация относится только к одной платформе и компилятору, возможно даже к версии компилятора, в зависимости от гарантий ABI этого конкретного компилятора.
В качестве примечания, как GCC, так и MSVC++ документированы алгоритмы компоновки для их vtable и документированные алгоритмы для того, где vptr находится в объекте. Для GCC документацией является Common C++ ABI (a.k.a. Itanium C++ ABI). Для MSVC++ я не знаю, где находится документация или существует ли она напрямую, но компилятор гарантирует, что по меньшей мере классы без элементов данных будут выложены для совместимости с COM ABI.
Что вы пытаетесь достичь? – DeiDei
Я подозреваю, что это реализация определена и зависит от ABI, поэтому (теоретически) нет в переносном режиме. – skypjack
Возможный дубликат [Как получить каждый индекс виртуальной функции, как это делает компилятор?] (Http://stackoverflow.com/questions/3062647/how-to-get-every-virtual-function-index-just-as- the-compiler-does) – DeiDei