6

C++ に変換する必要がある C がいくつかあります。

それは次のようなことをします:

enum
{
   ELEM0,
   ELEM1,
   ELEM2,
   ELEM3,
   ELEM4,
   MAX_ELEMS
} 

#define LEN 16

static const char lut[MAX_ELEMS][LEN] =
{
    [ELEM2] = "Two",
    [ELEM3] = "Three",
    [ELEM1] = "One",
    [ELEM4] = "Four",
    [ELEM0] = "Zero"
}

実際には、配列に順序のない何百もの要素があります。配列内のエントリが列挙を適切なテキストに結びつけることを保証する必要があります。

-std=gnu++11 でこのような位置パラメータを使用して配列を初期化することは可能ですか?

4

1 に答える 1

3

いいえ。gccのドキュメントによると、指定された初期化子は GNU C++ には存在しません。

ISO C99 では、適用する配列インデックスまたは構造フィールド名を指定して、要素を任意の順序で指定できます。GNU C では、これを C89 モードの拡張としても許可しています。この拡張機能は GNU C++ では実装されていません。

これで問題は解決しませんか(実行時ですが):

static const std::map<int, std::string> lut =
{
    std::make_pair(ELEM2, "Two"),
    std::make_pair(ELEM3, "Three"),
    std::make_pair(ELEM1, "One"),
};
于 2013-10-29T15:17:27.890 に答える