如何确定虚函数在虚函数表中的位置3 (Linux x64版本)

时间:2025-02-23 12:57:40
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; }