1

私はc++ 11ブーストでプログラミングしており、誰かがクラス Baseから継承してmethod()を実装する必要があるある種のフレームワークを実装しようとしていますが 、これは他の継承に依存する可能性があります。これらの継承は、プログラマが変更することなく、メイン関数で自動的に作成される必要があります。

class Base
{
public:
   virtual void method() = 0;
}

class A : public Base
{
public:
   static int state = 0;

   void method()  //
   {
      //do something with B
      A::state = B::state * 3;
   }
}

class B : public Base
{
public:
   static int state = 0;

   void method() //
   {
      //do something with A
      B::state = A::state * 2;
   }
}

int main()
{

//Access to an Array containing ONE pointer to each Inheritance

vector<Base*> inheritancesOfBase;
inheritancesOfBase.push_back(new A); // <- should be done automatically 
inheritancesOfBase.push_back(new B); // <- should be done automatically 

//PSEUDOCODE
for_each(base* pInh in inheritancesOfBase)
{

    pInh->method();
    clones.push_back(pInh->clone());

}


return 0;
}

これは、派手なメタプログラミングで実行できるはずだと思いますが、どうすればよいでしょうか?

編集:明確化

4

2 に答える 2

0

まず第一に、静的変数の定義が欠落しているため、コードはコンパイルされません。int A::state = 0コードに追加 (または類似)する必要があり、 B::state.

第 2 に、A および B オブジェクトの自動作成は不可能です。これは、コンパイラがコードの意図を知ることができないためです。したがって、少なくともメインで A および B オブジェクトの宣言が必要です。たとえば、正確に 1 つの A オブジェクトと 5 つの B オブジェクトが必要であることを、コンパイラーはどのように認識すればよいでしょうか? したがって、コミラーにあなたの意図を述べる必要があります:

int main(void)
{
    A myA;
    B myBArray[5];
    vector<shared_ptr<Base>> myABCollection;
}
于 2013-07-22T09:41:39.640 に答える