我目前正在定义一些常量:
ModInfo
每个main()
包含一个模块的信息,该模块将由enum
在打印菜单中用于显示和流控制,以确定要打印哪个模块的菜单以及随后执行的哪个功能。
我可以通过数组索引访问数组元素中的模块信息,而不是将标识符(即模块名称)分配给该元素吗?有没有直接的方法来做到这一点,或[[NSColor colorWithDeviceWhite:1.0 alpha:0.75] set];
NSRectFill(fillRect);
唯一的黑客做到这一点?
编辑:请不要让我在每个问题中使用C ++ 11。如果可以,我会的。
答案 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(甚至可能作为标签)。您可以使用最新版本的GCC或Clang/LLVM(可能是通过编译源代码中的编译器),两者都是free software。
(C++11之前的C ++版本已过时;当前标准是C ++ 14;如果您需要旧版本的C ++,则应该适当标记您的问题)
您应该了解C ++ containers和smart 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;