Оптимизация: убрать вычисление параметров у пустой функции
От: adb Россия  
Дата: 15.09.22 17:18
Оценка:
        int h1 = finalVal = (A() - 5 * C() + 20 * G() + 20 * M() - 5 * R() + T());
        push(QString("h1 = (A - 5 * C + 20 * G + 20 * M - 5 * R + T)"));
        push(QString("h1 = (%1 - 5 * %2 + 20 * %3 + 20 * %4 - 5 * %5 + %6) = %7")
                    .arg(A()).arg(C()).arg(G()).arg(M()).arg(R()).arg(T()).arg(h1));


Есть примерно такой код. И два способа использования.
1. Штатный должен выполнить все. Результатом будет вектор строк, который пойдет в ГУИ при нажатии мышки на пиксель (push — кидает строку в вектор).
2. Тестовый должен получить только finalVal для проверки. Создание объектов очень сильно убивает перформанс. Ибо в тестах нужно пройти каждый пиксель, каждой картинки. Т.е. он вызывается на много порядков чаще, чем при штатной работе.

Хочется без всяких if получить два кода. Пробовал сделать push пустым (думал в ней и сделаю if (template_parameter)). Но MSVC QString все равно создает и тут же сносит. Clang вроде как чистит все в ноль.

Есть ли какой-нибудь универсальный метод сделать нужное без макросов и лишних If?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.