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 回答