2

次の問題があります。私は C++ で継承構造をコーディングするのに忙しいです。簡単に言えば、これが私がやろうとしていることです。クラス A は基本クラスで、クラス B と C は継承されたクラスです。クラス B と C には、それぞれ異なる固有のメンバー関数があります。

次に、ブースト スマート ポインター ライブラリを使用して、次のようにクラス タイプ A の共有ポインターのベクターを作成します。

class A{
   A();
   virtual print();
}

class B : public A{
   B();
   virtual print();
}

class C{
   C();
   virtual print();
   void uniqueFunc();
}

int main(){

  vector<shared_ptr<A> > myA;
  shared_ptr<B> myB;
  shared_ptr<C> myC;

  myA.push_back(myB);
  myA.push_back(myC);

}

これで、ベクター内のメンバーのタイプをチェックするメソッドができました。これは問題ではありません。私の質問は、ベクトル内のクラス型 C のメンバーに対して uniqueFunc を呼び出す方法です。私はダウンキャストする必要がありますか?または、仮想機能を作成する必要がありますか。ただし、uniqueFunc はクラス C に固有である必要があります。メンバーのコピーを作成することは避け、ベクトル内のメンバーを直接変更したいと考えています。

4

1 に答える 1

3

にダウンキャストするboost::shared_ptr<C>か、仮想関数を作成する必要がありAます。

ダウンキャストしたい場合は、Boost のポインター キャスト関数を使用できます。

boost::static_pointer_cast<C>(myA.back())->uniqueFunc();

(または、dynamic_pointer_cast<C>動的な型チェックが必要な場合に使用します。)

于 2012-09-21T17:59:38.103 に答える