クラスを持っていますが、1つのメソッドのオーバーロードされたバージョンはほとんどありません。すべてのバージョンは1つのパラメータ(オブジェクト)をとります。そのオブジェクトは常に1つの基本クラスから派生しています。 (Baseクラスのパラメータを取るメソッドはありません)。派生クラスへの基本クラスのキャスト
class Base { ... }
class Object1 : public Base { ... }
class Object2 : public Base { ... }
class Object3 : public Base { ... }
class T
{
// ...
do_sth(const Object1& obj);
do_sth(const Object2& obj);
do_sth(const Object3& obj);
// ...
}
そしてIは(のみ)派生クラスオブジェクトを含む、Base
クラスを指すunique_ptr
でベクトルを作成します。
std::vector<std::unique_ptr<Base>> vect; // then some push_backs
は今、私はこのように、vect
内のすべてのオブジェクトに対してT::do_sth
を呼びたい:render(*object)
通話do_sth(Base)
が、それも存在しないため、
for (auto& object : vect)
T_obj.do_sth(*object);
しかし、その方法は、それは、IMPOSIBLEだ(およびその行動を望んでいないだろう)。私はその行をいくつかの異なる(キャストを使用して)置き換えようとしましたが、私の試みは成功しませんでした。それを修正するには?
[派生クラスのC++のキャスト]の可能な重複(http://stackoverflow.com/questions/5313322/c-cast-to-derived-class) –
'do_sth'のための関数のシグネチャとは何であり、 'レンダリング'?オブジェクトを値渡ししていますか?あなたは[最小、完全で、証明可能な例](http://stackoverflow.com/help/mcve)を提供できますか? – qxz
@Quentin @qxz:私は私の例で間違いがあった、私はそれを編集しました。 'do_sth'パラメータは常にconst参照です。 私は 'do_sth(dynamic_cast(* object));'を試しましたが、ナイスセンスです... –
mdjdrn1