如果我有指向基类对象的指针,我怎样才能得到虚方法的地址?

时间:2017-08-15 19:53:32

标签: c++ function polymorphism virtual

例如我有:

class A{
public:
virtual void run(){...}
};


class B:public A {
public:    void run(){...}
};


A* ptr= new B();

我只有一个指针' ptr'。我知道指针是类型' A *'但我不知道它是否指向班级的对象' A'或者' B'或其他一些课程' X'这是从A类派生出来的,并且还实现了函数'运行'(在我的例子中,我的对象是类型' B')。我怎么能得到函数的地址'运行& #39;这是在我的对象的类中实现的吗?

2 个答案:

答案 0 :(得分:1)

听起来像你想要的dynamic_cast。 您可以dynamic_cast到各种派生类类型,并测试是否获得有效指针或nullptr。这将允许您确定基类指针指向的对象的动态类型。

答案 1 :(得分:0)

据我了解,没有可行的方法。 选项:

  1. 手动查找vtbl。它不是便携式的。
  2. 如果您可以更改基类,请尝试强制其用户向您提供必要的信息
  3. 你能写一个排序
  4. 的包装器吗?
    void f(A *object) {
       object->run();
    }
    

    并使用其地址而不是实际运行函数的地址?

    顺便问一下,你在找什么?指向成员函数的指针?实现的指针?只是一些地址?