如果您的枚举值足够密集,您可以定义一个数组来保存字符串,然后只查找它们(对任何跳过的值使用NULL,并在查找例程中添加一个特殊的大小写处理程序)。
char *DogList[] = {
"vizsla", /* element 0 */
NULL,
NULL,
NULL,
"terrier", /* element 3 */
...
};
这对于稀疏枚举来说效率很低。
即使枚举不是密集的,也可以使用结构数组来保存映射。
typedef struct DogMaps {
DogType index;
char * name;
} DogMapt;
DogMapt DogMap[] = {
{kVizsla, "vizsla"},
{kTerrier, "terrier"},
{kYellowLab, "yellow lab"},
NULL
};
第二种方法非常灵活,但它确实意味着每次需要使用数据时都要搜索映射。对于大型数据集,请考虑使用b-tree或hash而不是数组。
任何一种方法都可以被推广以连接更多的数据。在第一种情况下使用结构数组,在第二种情况下只需向结构添加更多成员。
当然,您需要编写各种处理程序来简化与这些数据结构的交互。
@好时无论如何,分开代码和数据。上面的例子是为了清楚而非实用。
我不好意思承认,我仍然使用以空格分隔的平面文件来实现这一目的,而不是你展示的那种结构化输入,但我的生产代码会尽可能多地从外部源读取数据。
等等,我明白你说的是代码生成。
当然这没什么错。
我怀疑,尽管OP对生成的代码应该是什么样子感兴趣。。。