数组元素可以有标识符吗?

时间:2016-01-07 07:11:11

标签: c++ arrays initialization identifier c++03

我目前正在定义一些常量:

ModInfo

每个main()包含一个模块的信息,该模块将由enum在打印菜单中用于显示和流控制,以确定要打印哪个模块的菜单以及随后执行的哪个功能。

我可以通过数组索引访问数组元素中的模块信息,而不是将标识符(即模块名称)分配给该元素吗?有没有直接的方法来做到这一点,或[[NSColor colorWithDeviceWhite:1.0 alpha:0.75] set]; NSRectFill(fillRect); 唯一的黑客做到这一点?

编辑:请不要让我在每个问题中使用C ++ 11。如果可以,我会的。

4 个答案:

答案 0 :(得分:1)

enum不是一种黑客攻击,而是适合您用例的正确工具。

答案 1 :(得分:1)

您可以使用X macro

设置数组
#define MODULES \
  X(MenuItemA, 24, "some menu text") \
  X(AnotherMenuItem, 99, "here's another menu item" )

然后,通过适当地定义X来定义菜单数组以及来自同一表的描述性常量的枚举:

#define X(id, count, text) ModInfo(count, #text),
const ModInfo menus[] = {
  MODULES,
  ModInfo(-1, "")
};
#undef X

#define X(id, count, text) id,
struct ModuleId {
   enum Value {
MODULES
   };
};
#undef X

然后,您可以通过例如

访问您的模块信息
menus[ModuleId::AnotherMenuItem].text;

答案 2 :(得分:0)

请使用C ++ 11(甚至可能作为标签)。您可以使用最新版本的GCCClang/LLVM(可能是通过编译源代码中的编译器),两者都是free software

C++11之前的C ++版本已过时;当前标准是C ++ 14;如果您需要旧版本的C ++,则应该适当标记您的问题)

您应该了解C ++ containerssmart pointers,并且可以使用std::map<std::string,std::unique_ptr<ModInfo>>将某个(名称)字符串与指向ModInfo

的指针相关联

阅读一本关于Programming using C++的好书; BTW阅读SICP并练习一些Scheme不会造成伤害。

答案 3 :(得分:0)

如果数组的大小不是太大,那么具有命名字段的结构可能会更方便。

struct MyNamedStruct
{
    int NamedVariable1;
    int NamedVariable2;
    ...
    int NamedVariableX;
};

MyNamedStruct a;
...
a.NamedVariable1 = 10;