预处理器:如何使用列表定义变量和函数输入
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::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
或两个数组。
我有三个列表,一个是整型变量 (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::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
或两个数组。