我正在编写一个(我自己的语言)到 C++ 转译器。我希望能够提供一种虚拟子函数,该函数在调用它的同一范围内被转译为 C++ 代码的一部分。
这是我想要生成的 C++ 代码类型的示例:
if (a == {if (getValue(d) == 5) { long r = next(); next(); return r; } else return 0;})
dosomething();
它表示如果 a
等于括号中的结果,则 dosomething()
。
你可以看到这个想法是在表达式中内联一个函数。是的,这可以通过允许编译器内联来完成,但在这种情况下,我想继续访问外部作用域中的变量,如果它实际上是另一个函数,我会失去它。
有什么好的方法可以做到这一点?
答案 0 :(得分:4)
如果我正确理解你在做什么,你可以在这里简单地使用 lambda 表达式。这当然需要 C++11
<root class="object">
<contacts class="array">
<row>
<Identifier class="string">02</Identifier>
<Business_Phone>+34 67.89</Business_Phone>
</row>
</contacts>
</root>
如果您正在编写翻译器/转译器,您可能想尝试比这个通用的 if (a ==
[&] () {
if (getValue(d) == 5) {
long r = next();
next();
return r;
} else {
return 0;
}
}()) {
dosomething();
}
更明确的捕获列表。