Я хотел бы создать макрос, в котором предопределенная функция (здесь имитируемая «вызовом здесь fcn») вызывается каждый раз, когда цикл завершает итерацию. Это то, что я до сих пор, что на самом деле работает.
Есть ли более короткий путь, в конце концов с большим количеством макромагиков, чтобы написать такое поведение?
#define MYWHILE(condition) \
while( \
[]()->bool { \
static bool called = false; \
if(called) std::cout<<"call fcn here"<<std::endl; \
called=true; return true;}() \
&& condition)
Этот макрос следует использовать в нескольких местах кода, чтобы никто не забыл вызвать функцию, когда они пишут занятые циклы ожидания.
Типичным примером будет:
while(true){
bool b = foo();
if(b){
break;
}
ros::spinOnce();
}
Где часто вызывается ros::spinOnce()
, поэтому я просто заменяю пример кода на:
MYWHILE(true){
bool b = foo();
if(b){
break;
}
}
Pure C - Код тоже подойдет.