C++中获取成员函数地址的方法
前言
这里我一共总结了两种目前可以说是最高效易用的方法来获取成员函数地址,其中第一种利用 函数模板 实现,第二种直接在 .cpp 文件中利用汇编方法的 offset 语句实现。
至于为什么要取成员函数的地址?因为可以通过一定手段使得成员函数作为 回调函数 ,而无需使用全局的静态函数。
方法1:通过联合体的共享储存机制
template<typename AddressType, typename FuncPtrType>
AddressType union_cast(FuncPtrType func_ptr) // 获取类内成员函数的函数地址
{
union
{
FuncPtrType f;
AddressType d;
}u;
u.f = func_ptr;
return u.d;
}
不得不说这个方法确实很巧妙,完美的利用了联合体 union 的优点,当然模板的使用也使得该函数可迁移性更强。
union 的共享储存机制:剖析自定义类型和内存对齐