なし継承したクラスのいずれかの方法で、私はいくつかのベースclass A
、および継承したクラスをいくつか持っている:コールそれらの仮想プロトタイプ
class B : public A
class C : public A
class D : public A
を私は設定呼び出しで名前を使用し、いくつかの設定ファイルを解析して機能を、持っています
void do_smth<B>(...);
void do_smth<C>(...);
void do_smth<D>(...);
私はmap<A*> objs;
を持っており、それらの機能に起こった:
void do_smth<T>(...)
{
T *control = new T();
...
objs[name] = T;
}
私はポインタのマップを持っているので、私はname
を得て、B、CまたはDクラスに値を格納する必要があります。 ()、C - text()、D - currentValue()関数を持っているので、これらの値を返すクラスに仮想関数を追加できないという問題があります。私は、value(), text(), currentValue()
の結果をクラスに応じて返す関数get_value()
が必要ですか? 問題を解決するために私に助言してもらえますか?
私は2つの方法を参照してください。
1)私は、クラスB、C、Dへのポインタから関数を記述し、そのget_value((B*)objs[name]);
のような関数を呼び出すが、私は、それはよくないことだと思うことができます。
2)作成するB、C、D変数に関数が必要なオブジェクトboost::bind
を作成できます。
どのようにすればよいでしょうか、それとも良いことを教えてください。
コントロールには、 'value()'、 'text()'、 'currentValue()'のようなメソッドがあります。 –
純粋なQTではない - これらのライブラリのいくつかの拡張 – Olympian
これらのクラスがQtメタシステム(MOC、Q_OBJECTなど)を使用する場合は、 'QObject :: metaObject()'と 'QObject :: inherits()'を使ってあなたが実際に持っているクラスと 'qobject_cast()'をこのクラスにアップキャストして、適切なvalueメソッドにアクセスします。 –