预处理器:如何使用列表来定义变量和函数输入

Preprocessor: How to use a list to definition of variables and function input

本文关键字:变量 定义 函数 输入 列表 处理器 何使用 预处理      更新时间:2023-10-16

我有三个列表,一个带有整数变量(ilist),一个带双变量(dlist),另一个带有带有特定初始值的std::字符串变量(slist)。示例:ilist=(ilist1=init_val_1)(ilist2=init_val_2)

预处理器是否可以生成如下代码:

int ilist1=init_val_1;
int ilist2=init_val_2;
...
int ilistn=init_val_n;
double dlist1=dnit_val_1;
double dlist2=dnit_val_2;
f(ilist1, ilist2, ilist3, ..., ilistn, dlist1, dlist2);

我可以在这个项目中使用boost(boost::预处理器)。

当我刚开始编程时,我一直在寻找快速、安全地定义许多类似变量的方法。现在,我意识到,几乎无一例外,最好使用数组std::arraystd::vector——它更容易理解和使用,即使有一些使用预处理器的讨厌的方法。

FWIW,这立刻浮现在脑海中:

#define I(x) int ilist##x=init_val_##x
I(1);
I(2);
//[...]
#undef I //to avoid accidentally using it later in the code
#define D(x) double dlist##x=dnit_val_##x;
D(1);
D(2);
#undef D 

像这样需要大量变量的函数几乎肯定需要一个数组,std::arraystd::vector,或者两个。