ニワトリ<->エッグの問題があります。
コンテナー クラスのインターフェイスを作成して、特定の属性アクセサーやその他のメソッドの実装を強制できるようにすると同時に、コンテナー コンストラクターからこれらのメソッドを呼び出せるようにしたいと考えています。
しかし、Constructor から仮想メソッドを呼び出すと、階層内のコンストラクターが呼び出される順序のために、Base クラスのメソッドが呼び出されることがわかっています。
問題は、実装を強制するために仮想メソッドが必要ですが、それはコンストラクターで呼び出すことができないことです。
編集: コンテナー クラス (C1、C2...) を実装する必要があるときに、特定のメソッドを強制的に実装する必要があり、次にコンテナー コンストラクターでそれらのメソッドを使用できるようにしたい。簡単に言えば、INTERFACE 要件、declaration-only-mixin を実装したいと考えています。ありがとう
この問題をどのように解決しますか?
以下はコードサンプルです。
#include <iostream>
using namespace std;
class Base {
public:
virtual void myvirt() { cout << "Base::virt()" << endl; };
};
class C1 : public Base {
public:
C1() {cout << "C1()" << endl; C1::myvirt(); };
C1(int i) { cout << "C1(int)" << endl; }
void myvirt() { cout << "C1::virt" << endl;}
};
class C2 : public Base {
public:
C2() {cout << "C2()" << endl; C2::myvirt();};
C2(int i) { cout << "C2(int)" << endl; }
void myvirt() { cout << "C2::virt" << endl;}
};
template<class C = C1>
class Sc: public C {
public:
Sc() : C() { cout << "Sc()" << endl; };
Sc(int n): C(n) { cout << "Sc(int)" << endl; };
};
int main() {
Sc<C2> $sx(12);
return 0;
}
私が尋ねているように、特定の Constructors() の子孫クラスで強制的に実装する方法はありますか。「仮想コンストラクタ」のようなもの。