如何确定虚函数在虚函数表中的位置3 (Linux x64版本)
template <typename T>
union TFP;
// 特化模板,支持成员函数指针
template <typename ClassType, typename ReturnType, typename... Args>
union TFP<ReturnType(ClassType::*)(Args...)> {
using MemberFuncPtr = ReturnType(ClassType::*)(Args...); // 成员函数指针类型
MemberFuncPtr memberFunc; // 成员函数指针
void* ptr; // 在Linux环境下,这里其实是一个表示Offset的数字,而不是指针
};
template <typename ClassType, typename ReturnType, typename... Args>
uint64_t GetMemberFnOffset(ReturnType(ClassType::* func)(Args...))
{
TFP<decltype(func)> fp;
fp.memberFunc = func;
return (uint64_t)fp.ptr;
}