例如,我有:
class A{
public:
virtual void run(){...}
};
class B:public A {
public: void run(){...}
};
A* ptr= new B();
我只有一个指针"ptr"。我知道指针是类型"A*",但我不知道它是否指向类"A"或"B"的对象,还是指向从类 A 派生的其他类"X",并且还实现了函数"run"(在我的示例中,我的对象是类型"B"(。如何获取在对象类中实现的函数"run"的地址?
听起来你想要dynamic_cast
. 您可以dynamic_cast
到各种派生类类型,并测试是否获得有效的指针或返回nullptr
。这将允许您确定基类指针指向的对象的动态类型。
据我了解,没有便携式方法可以做到这一点。 选项:
- 手动查找 vtbl。它不是便携式的。
- 如果可以更改基类,请尝试强制其用户向您提供必要的信息
- 你能写一个包装器吗
void f(A *object) {
object->run();
}
并就地使用它的地址而不是实际运行函数的地址?
顺便说一句,你在找什么?指向成员函数的指针?指向实现的指针?只是一些地址?