【发布时间】:2011-04-05 10:36:35
【问题描述】:
我正在从 python 生成自动 C++ 代码,特别是我需要为事件列表选择一些事件。我声明了一些选择:
selectionA = Selection(name="selectionA", formula="A>10")
selectionB = Selection(name="selectionB", formula="cobject->f()>50")
selectionC = selectionA * selectionB # * means AND
这会生成 C++ 代码:
for(...) { // cicle on events
event = GetEvent(i);
bool selectionA = A>10;
bool selectionB = cobject->f()>50;
bool selectionC = (A>10) and (cobject->f()>50);
if (selectionA) { histo_selectionA->Fill(event); }
if (selectionB) { histo_selectionB->Fill(event); }
if (selectionC) { histo_selectionC->Fill(event); }
}
这不是很聪明,因为最聪明的代码是:
bool selectionC = selectionA and selectionB
这个问题看似简单,其实不然,因为我有 100+ 个基本选择(如selectionA 或selectionB)和 300+ 个派生选择,当然派生选择可以从派生选择中派生.明显的派生选择不是从使用常规模式的基本选择派生的。
我知道这很难回答,但有人可以给我一些提示吗?例如:真的有必要编写智能代码吗?我的意思是,编译器无法优化这段代码?
【问题讨论】:
-
我相信大多数 C++ 编译器已经为你做这件事了。
-
为什么变量中没有一个标志,只在第一代扩展为公式,然后扩展为布尔条件的名称?
-
@blwy10: 因为它不是那么容易,特别是你必须保证以正确的顺序声明 bool 变量并且没有重复
-
没错,这并不容易。但是考虑到一个 Selection 对象只能通过其构造函数或 * 运算符创建,这已经可以用来跟踪函数中所有选择变量的顺序。除非我在这里遗漏了什么......
标签: c++ python compiler-construction code-generation