【问题标题】:Most efficent way to implement a function in class Base在 Base 类中实现函数的最有效方法
【发布时间】:2012-10-27 09:28:06
【问题描述】:

我有一个基类 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 的特定条件? 由于当前的一些限制,我不想使用虚函数

【问题讨论】:

  • 为什么不用虚函数?
  • 问题不清楚。你想达到什么目标?
  • 你现在正在做什么来解决这个问题?或者问题真的是,“我不知道该怎么做!”?区别很重要!顺便说一句,高效是什么意思?
  • 由于目前的一些限制,我不想使用虚函数。
  • @Rook 真正的区别在于,你是想让我问你问题还是你想回答这个问题。

标签: c++ windows inheritance callback


【解决方案1】:

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

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

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

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

【讨论】:

  • +1 主要是最后一句话。我想不出任何不围绕你呈现的机制的机制,而且两者都远不如虚函数。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2011-03-16
    • 2015-07-16
    • 2012-01-11
    相关资源
    最近更新 更多