私はこのようになりたい基本クラスを持っています:
class B
{
// should look like: int I() { return someConst; }
virtual int I() = 0;
public B() { something(I()); }
}
重要なのは、派生クラスを強制的にオーバーライドI
し、各オブジェクトが構築されるときに強制的に呼び出されるようにすることです。これはいくつかの簿記を行うために使用され、どのタイプのオブジェクトが構築されているかを知る必要があります(ただし、それ以外の場合は、現在のオブジェクトを基本クラスとして扱います)。
C ++ではコンストラクターから抽象仮想関数を呼び出せないため、これは機能しません。
同じ効果を得る方法はありますか?
このリンクに基づくと、答えは私が欲しいものを手に入れる方法がないということのように思われます。しかしそれが言うことは:
簡単な答えは:いいえ。基本クラスは、それがどのクラスから派生したかについては何も知りません。それも良いことです。
[...]
つまり、コンストラクターDerived1 :: Derived1が開始するまで、オブジェクトは正式にはDerived1のインスタンスにはなりません。
しかし、私の場合、それが何であるかを知りたくはありませんが、それがどうなるかを知りたくありません。実際、ユーザーが(事後に)クラスにマップできる限り、何が返されるかは気にしません。だから私はリターンポインタのようなものを使ってそれを回避することさえできた。
(今、そのリンクを読むことに戻ります)