【问题标题】:Preprocessor: How to use a list to definition of variables and function input预处理器:如何使用列表来定义变量和函数输入
【发布时间】:2015-06-27 17:50:57
【问题描述】:

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

【问题讨论】:

  • 为什么不直接使用数组呢?我的意思是,而不是通过预处理器来破解这个?
  • 是的,只要 n 足够小(我认为是 256)就很有可能。

标签: c++ boost boost-preprocessor


【解决方案1】:

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

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 或两个真的。

【讨论】:

  • 宏中的代码着色有点误导 - 该行的其余部分没有被注释掉!
  • hdijohkem,这对您有帮助吗?我会得到评论/赞成/接受的答案吗?
  • 感谢这对您有很大帮助。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2011-07-09
相关资源
最近更新 更多