我有三个列表,一个是整数变量(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)。
答案 0 :(得分:0)
当我刚刚开始编程时,我一直在寻找快速安全地定义许多类似变量的方法。现在,我意识到,几乎无一例外,最好使用数组std::array
或std::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::array
或std::vector
或两个。