在Base类中实现函数的最有效方法

时间:2012-11-07 10:28:16

标签: c++ windows inheritance callback

我有一个基类Base和两个派生类DerivedA,DerivedB

class Base
{
};

class DerivedA: public Base 
{
   CallbackTypeA callA; // call back function pointer of type CallbackTypeA.
};

class DerivedB : public Base 
{
   CallbackTypeB callB; // call back function pointer of type CallbackTypeB.
};

任何人都可以告诉我在类Base中实现函数的最有效方法 根据哪个对象调用它来检查callA或callB的特定条件? 由于一些当前的限制,我不想使用虚函数

2 个答案:

答案 0 :(得分:2)

我可以想到两种可行的方法,但我仍然建议尽可能使用虚函数。

一个。
有一个指向基类中函数的指针,并在派生类的构造函数中将其设置为指向正确的函数。然后基类可以调用它。但这基本上就是虚拟功能机制所做的事情。

B中。
在基类中有一个Enum,它有一个每个派生类的值,每个派生类都会将这个Enum设置为它自己的值。在Base类中,您可以检查此值并转换为正确的类并调用正确的函数。但这是非常非常糟糕的做法,因为Base类需要知道派生类。

同样,我不知道是什么让你不想使用虚拟功能。但我想你应该重新考虑一下......

答案 1 :(得分:1)

使用虚函数和/或(取决于代码的实际结构)typeid。在大多数情况下,虚函数可能是整体上最好的解决方案:代码易读性,不易出错等等。