Это допустимое (ab) использование лямбда-выражений?

Как мы все знаем, не так просто прервать из вложенного цикла из внешнего цикла без одного:

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


Теперь, думая обо всем C ++ 0x и т. Д., Третий вариант подсказал мне идею использования лямбда-выражений:

#include 

bool CheckCondition(){
  return true;
}

bool CheckOtherCondition(){
  return false;
}

int main(){
  [&]{while(CheckCondition()){
    for(;;){
      if(!CheckOtherCondition())
        return;
      // do stuff...
    }
    // do stuff...
  }}();
  std::cout << "yep, broke out of it\n";
}

( Пример на Ideone. )

Это обеспечивает семантическую красоту простого return , который предлагает третий вариант, не страдая от проблем контекста и будучи (почти) таким же чистым, как версия goto . Кроме того, он даже короче (по символам), чем любой из вышеперечисленных вариантов.


Теперь я научился сдерживать радость после того, как нашел красивые (ab) варианты использования языка, потому что почти всегда есть какие-то недостатки. Есть ли на этом? Или есть еще лучший подход к проблеме?

13
задан Johannes Schaub - litb 2 October 2011 в 10:46
поделиться