我有一些现有代码使用enum
而不是函数指针进行回调。使用表格调用回调:callback_table[enum]
。
枚举以enum_ prefix
命名,相应的函数以func_ prefix
命名。
因此,涉及回调的函数调用如下所示:
foo (param, enum_name);
在浏览代码时,我必须使用名称部分和前缀func_,而不是仅仅执行“跳转到定义”。
我想要一个宏,以便我的代码看起来像这样:
foo (param, f2e(func_name));
这样我就可以保持现有代码不变,仍然可以进行“跳转到定义”。
是否可以拥有这样的宏?最简单的解决方案是省略func_
,这意味着f2e简单地附加enum_ prefix
,但我更喜欢一个我仍然可以拥有func_
的解决方案。这可能吗?
答案 0 :(得分:1)
这有点圆,但你可以这样做:
(我们假设,为了这个例子,您有三个可能的枚举值enum_one
,enum_two
和enum_three
)。
#define enum_func_one enum_one
#define enum_func_two enum_two
#define enum_func_three enum_three
#define f2e(func_name) enum_ ## func_name
缺点(当然)是你需要为枚举的每个可能值提供一个特殊的#define。
<强>替代强>
作为替代方案,如果您唯一需要的是功能名称方便,那么您可以使用IDE的“跳转定义”功能......您可以这样做:
#define f2e(name, func_name) enum_ ## name
然后你的电话会是这样的:
foo (param, f2e(one, func_one));
或许有点多余,但它会实现您的目标,而对代码的其余部分的干扰最小。