【发布时间】:2016-11-17 23:42:49
【问题描述】:
我有大量变量名,每个变量名都有以下模式,
- ABC_00_fld1
- ABC_01_fld1
我想要实现的是将这些参数传递给 c++ 中的宏并去掉前缀。像这样的:
#define MAKE_FLD( param )\
some manipulation on param
预期结果:
MAKE_FLD( ABC_00_fld1 ) => fld1
我知道我们可以通过简单的函数来实现这一点,但是宏的选择受限于我,而且我还有很多其他可移动的部分可以使用上述函数来生成更多宏。我不知道在 C++ 中执行此操作的方法。我已经研究过 stringify 但我不确定这是否符合要求。请张贴您的建议。
编辑: 阅读所有建议迫使我提供更多背景信息。给出关于这个宏的使用的一些观点。考虑应用程序正在使用宏生成结构。所以每个结构都会有一堆数据成员。上面提到的“ABC_00_fld1”成为在应用程序的其他部分定义的类的数据类型。所以在通过宏生成的结构中看起来像这样。
struct macro_struct_fld1 {
ABC_00_fld1 fld1;
};
struct macro_struct_fld2 {
ABC_01_fld1 fld1;
};
上面的 sn-p 是我想要实现的目标的动机。还有其他方法可以实现上述目标,在我的宏生成结构中,而不是传递数据类型列表,我可以传入包含数据类型和变量名称的枚举列表并将其提取出来,但是我必须手动构建我不喜欢的名称。
【问题讨论】:
-
字符串操作不是宏所擅长的。有一些关于这个的堆栈溢出问题 - 你谷歌了吗?
-
你的宏能扩展到函数调用吗?
-
你打算用这些缩短的变量名做什么?
-
@πάνταῥεῖ 这会有帮助吗? OP 似乎希望在编译时进行这些修改,因为它们是变量名。
-
@Ben 我刚刚意识到 OP 不想要字符串化的东西。