是否有派生類的任何主流語言的設計模式繼承代碼從基類並評估派生類的範圍中的代碼?例如(使用僞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.
編輯#3更感興趣的是解決方案:模式應在運行時類型,而不是編譯時類型的工作。因此,D模板這個參數不是解決方案。
你是什麼意思評估?在你給它看起來像正常繼承的情況下 – greedybuddha
printSize()將始終打印基類的大小,因爲它在Base的範圍內編譯一次。我希望它打印派生類的大小,如果它在Derived的實例上調用。 – dsimcha
這隻適用於C++語言。當然,使用java和正確的java語法,這會自動被認爲是虛擬的,並且會打印派生類的大小 – greedybuddha