gpt4 book ai didi

c++ - 迭代 C++ 宏 "list"以生成代码

转载 作者:行者123 更新时间:2023-11-30 02:47:14 27 4
gpt4 key购买 nike

我想写一些c++宏代码来转换:

#define FRUITS Apple Banana Plum
EXPAND(FRUITS)

进入:

void eat(Apple& instanceApple);
void eat(Banana& instanceBanana);
void eat(Plum& instancePlum);

是否可以编写一个 EXPAND() 函数来实现我的目标?

我意识到这看起来不像是好的编程习惯,但我必须链接到具有特定接口(interface)的第 3 方库,这样做的能力将使我能够避免在自己的代码中出现大量重复的代码块.

编辑:稍微改变了我的玩具示例。

最佳答案

我并不是说这对可读性有很大帮助,但它可以使用 Boost.Preprocessor 实现您想要的效果:

#define DECLARE_VAR(r, data, type) type BOOST_PP_CAT(instance,type);
#define EXPAND(seq) BOOST_PP_SEQ_FOR_EACH(DECLARE_VAR,,seq)

现在您可以按如下方式定义您的水果列表:

#define FRUITS (Apple)(Banana)(Plum)

然后您可以使用 EXPAND(FRUITS) 生成变量声明。有关完整示例,see here .

根据请求,每行打印一个水果的相同技术:

#include <iostream>
#include <boost/preprocessor.hpp>

#define PER_LINE(r, data, type) BOOST_PP_STRINGIZE(type) "\n"
#define EXPAND(seq) BOOST_PP_SEQ_FOR_EACH(PER_LINE,,seq)

#define FRUITS (Apple)(Banana)(Plum)

int main() {
std::cout << EXPAND(FRUITS);
}

关于c++ - 迭代 C++ 宏 "list"以生成代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22871153/

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