これは私をしばらく悩ませてきたものです。
それで、あなたがあなたのbaseClassとderivedClassを持っているとしましょう。また、管理しているすべてのオブジェクトへのポインターを保持するbaseClassポインターのコンテナーオブジェクトもあります。
問題は、派生クラスの引数を持つオーバーロードされた関数がある場合に発生します。
例:
function foo(baseClass, baseClass);
function foo(baseClass, derivedClass);
function foo(derivedClass, derivedClass);
vector<baseClass*> objectList;
objectList.push_back(new derivedClass());
objectList.push_back(new derivedClass());
foo(objectList[0], objectList[1]); // <-- Here's the problem.
これまで私は何かハックなことをしてきましたが、それは私が定義した「getType()」列挙型メンバー変数に基づいた「正しい」型へのstatic_castingです。それは本当に醜いです、そして私はこれらの引数を派生クラスとして渡す正しい方法を知りたいです。
それとも、これは全体として悪いデザインですか?
いいえ、コンテナクラスをderivedClass型にすることはできません...baseClassはいくつかの異なるクラスのベースです。それがベクトルにある間、私はそれがどんなオブジェクトタイプであるかを気にしません。それを引数に渡すとき、コンパイラーにそれがどんなタイプであるかを知ってもらいたいです。