gpt4 book ai didi

c++ - 自动生成枚举查找表

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:18 25 4
gpt4 key购买 nike

我正在使用类似于 this 的技术与普查员相关的信息和/或行动。它工作得很好,但是有一个小问题需要有效地列出每个常量两次,一次在头文件中的枚举声明中,一次在源文件中的查找表中。我想知道是否有任何好方法,可能是预处理器技巧(Boost.Preprocessor 是可以接受的)来“自动化”它,这样我就可以在一个地方输入枚举常量和相关值等,并拥有所有必要的东西(甚至可能会生成查找结构本身)。

如果可能的话,我更喜欢一种保持模糊枚举风格语法的方法;例如,类似于 DECLARE_ENUM(...) {E_CONST(...), E_CONST(...)};。我看到一些网站提到为了实现这一点而双重包含头文件的想法,即像这样的东西:

#include "my_enum.hpp"
#undef ENUM_HPP // undefine the include guard
#undef E_CONST
#define E_CONST(...) /* something here */
#include "my_enum.hpp"

...但我不确定该技术在这里会有多大用处。特别是,不仅仅是 header 中定义的枚举;查找表结构以及一些其他相关的枚举和支持函数也在那里。

我已经在使用宏来定义查找表中的元素(它使用 C99 初始值设定项,因此即使我重新排列枚举常量的顺序,条目也将始终位于正确的位置)。

可以应用于多个枚举的解决方案也很好。

我为此使用 clang (Apple-3.1),并不特别担心可移植性。

我在某个地方尝试过,但我放弃了……我不记得为什么它不起作用。也许我可以在 Time Machine 中找到它...

最佳答案

使用预处理器技巧,您可以在不同的文件(例如 enum_foo.def)中定义您的枚举。这将是一个不 protected 文件,得到 #included。

ENUM_FOO_DEF(ALPHA, 9, 2)
ENUM_FOO_DEF(BETA, 10, 3)
ENUM_FOO_DEF(GAMMA, 12, 7)
ENUM_FOO_DEF(DELTA, 13, 11)
//...

然后在您的源文件中,您将执行以下操作:

enum FooEnum {
#define ENUM_FOO_DEF(X,Y,Z) FOO_E_ ## X,
#include "enum_foo.def"
#undef ENUM_FOO_DEF
FOO_E_MAX
};

并且您可以执行类似的操作来填充您的 enum 属性表。

关于c++ - 自动生成枚举查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11356047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com