何かが成功するかタイムアウトするまでループって処理で
for (int i = 0; i < 5000; i += s){
 nanika = suru();
 if (nanika == seikou) break;
 sleep(s);
}
みたいのが繰り返し出てくるんだけど、何か上手い書き方ないですか?

optional r = seikou_or_timeout(5000, [](){ return optional(...); });
こんな感じで書けたら素敵なんですが・・・・・・