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

时间:2015-06-27 17:50:58

标签: c++ boost boost-preprocessor

我有三个列表,一个是整数变量(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)。

1 个答案:

答案 0 :(得分:0)

当我刚刚开始编程时,我一直在寻找快速安全地定义许多类似变量的方法。现在,我意识到,几乎无一例外,最好使用数组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或两个。