我从" Inside the C++ Object Model "中读到,type_info对象通常存储在虚拟表的第一个插槽中.但是,我迭代了虚拟表中的成员:
class Base {
public:
virtual void f() { cout << "Base::f" << endl; }
virtual void g() { cout << "Base::g" << endl; }
virtual void h() { cout << "Base::h" << endl; }
};
typedef void(*Fun)(void);
Base b;
(Fun)*((int*)*(int*)(&b)+0); // Base::f()
(Fun)*((int*)*(int*)(&b)+1); // Base::g()
(Fun)*((int*)*(int*)(&b)+2); // Base::h()
Run Code Online (Sandbox Code Playgroud)
从最后三行看,我根本找不到type_info.
没有交叉编译器方法来获取type_info对象的地址.你也不期望会有; 获得a的方法type_info是使用特定的C++关键字:typeid.
| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |