在C++中初始化静态const数组的特定元素

Joe*_*Joe 6 c++ arrays gnu g++ c++11

我有一些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"
}
Run Code Online (Sandbox Code Playgroud)

在实践中,我有数百个元素,在数组中没有任何顺序.我需要保证数组中的条目将枚举与适当的文本联系起来.

是否可以使用-std = gnu ++ 11中的位置参数初始化数组?

mas*_*oud 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"),
};
Run Code Online (Sandbox Code Playgroud)