0

type_infoプロパティ マップでプロパティのタイプを定義するオブジェクトを取得しました。type_info オブジェクトによって定義された型でパラメータ化されたコード (例: cin からの値の読み取り) を実行したいと思います。テンプレート関数、つまり次のようなものである可能性があります。

template<typename T>
void do_something()
{
  T a; cin >> a;
}

次に、コードの他の部分でそれを呼び出したいと思います:

const type_info &type_description = foo.get_type_of_something();
do_some_magic(do_something, type_description);

で記述される型に特化したdo_some_magic関数を探しています。テンプレート関数は何らかの構造でラップできますが、問題ありません。do_somethingtype_descriptor

もちろん、事前に定義された型の有限セットに対してのみ可能です (特殊化はコンパイル時にそれぞれに対して生成される必要があるため)。

1 つの方法は、チェーンなどを作成することですif(type_descriptor==typeid(int)) /*...*/ else if(type_descriptor==...が、これはあまりきれいな解決策ではありません (imo)。

もっとクリーンなソリューションが存在するかどうか疑問に思っていますか? それとも、いくつかのライブラリ(できれば「ブースト」)がそのようなメカニズムをすでに実装しているのでしょうか?

4

2 に答える 2

1

type_infoオブジェクトは、実行時にオブジェクトに関する情報を提供します。問題の唯一の解決策は、typeid各ターゲット タイプに対する演算子の結果と比較することです。

きれいなものを探しているので、 mapof type_info(実際にはラップされた) を (boost|std)::function<>sにすることができます。

于 2012-05-28T22:02:30.480 に答える