Задать вопрос
Wohlstand
@Wohlstand
Инженер-программист С++

Как записать логическое выражение в переменную?

Есть очередь событий, внутри которой последовательно производятся вызовы различных внутренних функций (команды каждого события - подождать время, вызвать функцию по записанному указателю, просто ждать исполнения условия для продолжения обработки очереди), одно из которых - это ожидание, пока какое-то условие истинно.

Идея заключается в том, чтобы не создавать для каждого выражения по функцие типа bool xxx::is_something_happened(), а чтобы как-нибудь поместить само выражение, которое будет проверяться при каждом такте. Например: чтобы выражение типа (((5+3-test())==0)||(is_vasya_cool)); можно было записать в элемент очереди событий, и повторно перепроверять истинность/ложность до бесконечности.

В условии могут участвовать как математические, сравнительные выражения, так и вызовы функций, или же получение значения других переменных, как мы бы просто написали это в самом коде.

Я в принципе не против создания проверочных функций по типу bool xxx::is_something_happened(), но хочу узнать ваше мнение, можно ли сделать это как-нибудь по универсальнее?
НО, т.к. в проекте используется OOLua, то я так же не против его задействовать включительно и для решения моей задачи - сохранять логическое выражение как кусочек LUA-кода, чтобы потом перепроверять до бесконечности, но основная суть стоит о том, чтобы применить концепцию на чистом С++, LUA-код в любом случае не будет быстрее.
  • Вопрос задан
  • 302 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C++
Если я правильно понял проблему, то вам надо работать с вашим предикатом, как со значением. Иными словами, работать с функцией, возвращающей bool, как с first-class объектом. Для этого в С++ есть std::function. Он позволит вам обернуть ваши проверки в функтор, и их можно будет поместить в очередь/список и т.д. Еще вам наверняка поддержка лямбда-функций в С++11.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы