2

メンバーはstd::map<string, double>次のようになります。

X = [{"N", 200}, {"sigma", 1.0}, {"T", .2}]

さて、構造体を考えるとfoo Y

struct foo {
    int N;
    double T;
};

タイプマッピングX -> Y ごとにカスタムクラスを作成せずX -> Yに、プログラムでキーと値のペアをマッピングできますか?ご了承ください:

  1. X["sigma"]に含まれていませんY。つまり、マッピングは必ずしも1対1である必要はありません。
  2. のタイプY.Nはintで、X["N"]はdoubleです。

コンパイル時に何らかのトリックが行われない限り、答えはノーだと思います。

編集:私が探しているものが明確でない場合があります。この例の擬似コードバージョンは、次のようになります。

if("N" in X) -> Y.N = X["N"];
if("T" in X) -> Y.T = X["T"];

またはプログラムで:

for key in Y:
    if (key in X) -> Y.key = X[key]
4

2 に答える 2

4

いいえ。C++にはリフレクションの概念がありません。コンパイル時には、"foo::N"文字列はもうありません。コンパイラはfoo::N、ソースコード内のすべての出現箇所をFooオブジェクト内の0バイトオフセットに変換しました。また、コンパイル時にクラスメンバーを列挙することはできません。

于 2012-06-07T15:32:36.047 に答える
0

マップの要素(文字列)のkeyのに基づいて、構造タイプのオブジェクトにフィールドを設定するとします。したがって、コンパイル時に実行することはできません。

于 2012-06-07T15:52:07.807 に答える