0

ユーザー入力に基づいて ENUM を生成する外部ツールがあります。現在、この ENUM は私の C++ コードで使用されており、変数「x」に基づいて特定の ENUM を選択する必要があります。生成される ENUM は、「ENUM_1」、「ENUM_2」、「ENUM_3」などの形式です。ここで、「x」に基づいて適切な ENUM が選択されるように、コード内にコードが必要です。次のような strcat 関数を使用してみました。

typedef enum ( enum_1, enum_2, enum_3...enum_n) map1;

y=(map1)strcat("enum_", x);

しかし、「char* から map1 に変換できません。

誰かがこれを達成する方法を提案できますか。

ありがとうございました

4

3 に答える 3

1

これはできません。うーん、このままじゃ無理かな…

列挙型は、コンパイル時に名前で評価されません。プリプロセッサで何かを試す必要があります。定義を作成して、同様のことを行うことができます。何かのようなもの:

#define fn(x) enum_##x

そして、電話する

fn(x)

ただし、これはファイルが前処理されるときに発生します。そのため、ランタイム変数にアクセスできません。あなたのコードから判断すると、あなたがやりたいことができるとは思いません。でも頑張ってください。

于 2011-03-29T05:45:37.130 に答える
1

を使用してこれを行うことはできませんstrcat。説明から、私が理解しているのは、に変換xしたいということですmap1。これを実現するには、次のmap1 m = (map1)(x-1);サンプル コードを参照してください。

typedef enum { enum_1, enum_2, enum_3} map1;

int main()
{
    int x = 1;
    map1 m = (map1)(x-1);
}

-1の列挙型の整数値はmap10 から始まるため、必須です。

于 2011-03-29T05:42:00.267 に答える
0

ここで、「x」に基づいて適切な ENUM が選択されるように、コード内にコードが必要です。

列挙値は定数であり、ステートメントに基づいてx、整数データ型であると想定しています。

y=(map1)strcat("enum_", x);

strcat(..) を渡すパラメータは type である必要がありますchar*。そして明らかに、前のステートメントに基づくxタイプではありません。なぜこのタスクを達成するためchar*に使用しているのかは明らかではありません。strcat

件名に対する回答:いいえ。列挙値で strcat を使用することはできません。

于 2011-03-29T05:44:31.670 に答える