Dep
クラスのツリーの基本クラスがあるとします。Dep* Dep::create()
すべてのリーフ クラスで実装したい仮想メソッドがあります。これを強制する方法はありますか?
注: ここでの問題は、中間クラス (など) がこのメソッド ( ) を誤ってclass B : public A : public Dep
実装している可能性があること、または中間クラスがリーフ クラスであると考えているために実際にはサブクラス化されている可能性があることです。A::create
質問はここまでです。
環境
なぜ私がこれを必要とするのか興味があるなら; 未知の具象型のオブジェクトを持つクラスMaster
があります。Dep
が重複している場合Master
は、一致するDep
インスタンスのクローンを作成する必要があります。次善の策は、まさにこの問題を引き起こす仮想コンストラクターのイディオムです。
さらに、私はこれをキャッチすることさえできません (恐ろしくクラッシュする以外)。なぜなら、あいまいな理由で、私よりも言いたいことがある人がdynamic_cast
このプロジェクトを非合法化したからです (おそらくこれは良い決定ですが、とにかくまったく別の議論です)。