【发布时间】:2013-05-15 14:45:44
【问题描述】:
在任何主流语言中是否存在派生类从基类继承代码并在派生类范围内评估该代码的设计模式?例如(使用伪 C++ 语法):
class Base {
// (How) can this be modified to be evaluated
// in the derived class's scope so that it
// prints the size of the derived class?
void printSize() {
cout << sizeof(*this) << endl;
}
};
class Derived : public Base {
void* dummy;
};
int main() {
Base base;
Derived derived;
base.printSize();
derived.printSize(); // Should be > base.printSize().
return 0;
}
我意识到这可以通过宏来完成,但这需要在派生类的范围内显式实例化宏。
编辑:澄清一下,这篇文章的重点是我不想在每个派生类中手动重新实现printSize() 或类似的东西。我正在寻找一种聪明的模式来制作编译器/解释器(我很想知道是否有任何语言有解决方案,即使我在我的示例中使用了 C++)为我做这个。
编辑#2:我想这在动态语言中很容易。我对静态类型语言的解决方案更感兴趣,主要是 C++、Java 和 D。
EDIT #3:该模式应该适用于运行时类型,而不是编译时类型。所以,D的模板这个参数不是解决办法。
【问题讨论】:
-
评估是什么意思?如果你给它看起来像正常的继承给我
-
printSize() 将始终打印基类的大小,因为它在 Base 范围内编译一次。如果在 Derived 的实例上调用它,我希望它打印派生类的大小。
-
这仅适用于 c++ 语言。使用 java,当然还有正确的 java 语法,这将自动被认为是虚拟的,并会打印派生类的大小
-
注意
printSize()返回void,所以你可能不想cout <<它;你可能打算自己打电话给printSize()。 -
@Adam:对。已编辑。
标签: java c++ oop design-patterns d