gpt4 book ai didi

c++ - 从宏参数中提取子集

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:54 24 4
gpt4 key购买 nike

我有大量变量名,每个变量名都具有以下模式,

  1. ABC_00_fld1
  2. 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;
};

上面的这段代码是我想要实现的目标的动力。还有其他方法可以实现上述目标,在我的宏生成结构中而不是传递数据类型列表,我可以传递包含数据类型和变量名的枚举列表并将其提取出来,但随后我必须手工构建我不喜欢的名字。

最佳答案

您可以使用称为字符串化 (https://gcc.gnu.org/onlinedocs/cpp/Stringification.html) 的 C 预处理器功能来获取参数名称的字符串版本。

从那里你可以操作字符串;像这样:

#include <iostream>
#include <string>

#define MAKE_FLD(param) (std::string(#param).substr(7))

int main()
{
int ABC_00_fld1 = 0;

std::cout << MAKE_FLD(ABC_00_fld1) << std::endl;

return ABC_00_fld1;
}

这输出“fld1”。此处编译和测试的代码:http://cpp.sh/8tkk

关于c++ - 从宏参数中提取子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40667044/

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