【问题标题】:Calling the correct overloaded function from a container class从容器类调用正确的重载函数
【发布时间】:2012-05-29 23:10:24
【问题描述】:

这是困扰我一段时间的事情。

假设你有你的 baseClass 和 derivedClass。您还有一个 baseClass 指针的容器对象,其中包含指向您正在管理的所有对象的指针。

当有一个带有派生类参数的重载函数时,问题就来了。

例子:

function foo(baseClass, baseClass);
function foo(baseClass, derivedClass);
function foo(derivedClass, derivedClass);

vector<baseClass*> objectList;

objectList.push_back(new derivedClass());
objectList.push_back(new derivedClass());

foo(objectList[0], objectList[1]); // <-- Here's the problem.

到目前为止,我一直在做一些骇人听闻的事情,那就是基于我定义的“getType()”枚举成员变量的“正确”类型的静态转换。这真的很难看,我想知道将这些参数作为派生类传递的正确方法。

或者这只是一个糟糕的整体设计?

不,容器类不能是derivedClass 类型... baseClass 是几个不同类的基础。虽然它在向量中,但我不在乎它是什么对象类型。当我将它传递给参数时,我希望编译器知道它是什么类型。

【问题讨论】:

  • 如果foo 必须知道基数和派生数之间的区别,那么您就是在滥用 OOP。为什么不在基类中将foo 设为虚函数,以便在派生类型中对其进行覆盖?
  • 因为在我的代码中, foo 是从另一个类调用的静态函数。忘了说:(
  • 你不能让它成为一个实例函数吗?制作一个需要虚拟调度的函数static 听起来不是很有用...

标签: c++ vector templating derived-class


【解决方案1】:

你正在尝试做multiple dispatch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多