【发布时间】: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