派生クラスが基本クラスからコードを継承し、派生クラスのスコープでそのコードを評価するための設計パターンは、主流の言語に存在しますか? 例 (疑似 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 のテンプレートのこのパラメーターは解決策ではありません。