Я генерирую автоматический код C ++ из python, в частности, мне нужно выбрать некоторые события для списка событий. Я объявляю некоторые выборы:
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+ производных выборов, и, конечно, производный выбор может быть получен из производного выбора , Очевидные производные выборки не выводятся из базовых выборок с использованием регулярного шаблона.
Я понимаю, что ответить сложно, но может кто-нибудь дать мне несколько советов? Например: действительно ли необходимо писать умный код? Я имею в виду, компиляторы не могут оптимизировать этот код?