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

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

我有三个列表,一个是整型变量 (ilist),一个是双精度变量 (dlist),另一个是 std::string 具有特定初始值的变量 (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::preprocessor)。

当我刚开始编程时,我一直在寻找快速、安全地定义大量相似变量的方法。现在,我意识到,几乎总是,最好使用数组 std::arraystd::vector 代替 - 它更容易理解和易于使用,即使有一些讨厌的 hacky 做事方式它与预处理器。

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 或两个数组。