大家好,我遇到了宏问题,所以我想我会练习,我正在看##宏运算符,并认为我可以用它来解决我的问题我不能调用基于的多个函数例如,如果我有一个这样的宏:
#define macro(a) func##a();
int main()
{
.....
for(int i = 0;i< length;i++)
{
macro(i)
}
func1()
{
}
....
func31()
{
}
任何人都知道如何才能做到这一点?
答案 0 :(得分:2)
您只能组合两个预处理程序令牌。但是,func
不是预处理程序令牌。你需要跳过一个额外的箍,呼叫某种形式的&#34; concat&#34;宏:
#define CONCAT(a, b) a ## b
#define macro(a) CONCAT(func,a)
当然,由您制作的令牌不会是func1
,......,func31
(当然,如果func0
,他们还需要以funci
开头你的逻辑是正确的)而是for
。宏的扩展发生在编译开始时,而BOOST_PP_REPEAT
- 循环的执行发生在运行时(某些优化可能会将其提升到编译时但不会影响宏)。 / p>
如果您需要结合宏来扩展整数序列,您可能需要查看Boost预处理器库,特别是{{1}}功能。
如果你只需要将整数序列静态扩展为函数调用,你也可以考虑查看在整数上模板化的函数模板:在尝试使用预处理器库之前,我当然会考虑使用模板的方法...