从base调用非虚拟成员函数

时间:2013-12-16 16:35:27

标签: c++ class oop pointers function-call

我即将绝望!我需要从指向我的基类的指针调用非虚拟成员函数:

class A {  };

class B : public A { public: void evilFunction() { std::cout << "Yay!"; } };

int main(void) {
    A *pointer = new B();

    // Now do something like this: 
    // pointer->evilFunction();

    return 0;
}

我知道我可以用dynamic_cast做到这一点 - 但我不被允许! 我真的不知道我还能做些什么。从理论上讲,由于我有指针,我很确定我可以用指针算术做一些魔法来获取函数的内存位置然后调用它,但我不知道怎么做或者至少如何启动。

任何能给我一个提示的人?这就是我所需要的一切。或者我将使用我的史诗初学者技能编写代码来删除g ++以报复C ++对我造成的痛苦!你不能让这种情况发生,对吧?!

2 个答案:

答案 0 :(得分:0)

这里的主要问题是,为什么不允许使用dynamic_cast。

如果这是因为您不使用RTTI,并且您仍然可以使用static_cast - 这可能是您的答案。

但是,如果这是因为代码标准或相似,我会想象static_cast或任何“魔法”也将被禁止,因此,您将不得不考虑另一种解决方案(例如,制作此方法虚拟,将“manual typeid”添加到基类,并相应地调度(讨厌这个...)等。

答案 1 :(得分:0)

如果不想使用虚函数的原因是为了避免使用RTTI,则可以使用CRTP idiom实现静态多态。