Как сделать это красиво?
От: higohertz  
Дата: 27.06.12 05:18
Оценка:
Даже не знаю, куда запостить — если что поправьте.

Очень часто приходится обрабатывать возвращаемое значение функций идущих подряд. Например:
if( ERROR == func1(p1, p2) )
{
   cout << "ERROR func1()";
   return;
}
if( ERROR == func2(p3, p4) )
{
   cout << "ERROR func2()";
   return;
}
...


Вот вопрос в том как лучше написать подобный код. Те чтобы не сильно напрягало глаз, не плодило лишних строк кода и тп. За все время возникали следующие идеи:
1. #define
#define CHECK_AND_EXIT(func, ok_value, err_str) \
   if( ok_value != func )      \
   {                           \
      cout << err_str;         \
      return;                  \
   }

Далее код превращается в:
CHECK_AND_EXIT( func1(p1, p2), OK, "ERROR func1()" );
CHECK_AND_EXIT( func1(p2, p3), OK, "ERROR func2()" );


2. throw — наверное стандартный подход
try {
  if( ERROR == func1(p1, p2) ) throw "ERROR func1()"
  if( ERROR == func2(p2, p3) ) throw "ERROR func1()"
}
catch(...)
{
   cout << ...;
   return;
}


3. while — аналогично throw
int bOk = true
while(true)
{
  if( ERROR == func1(p1, p2) ) { bOk = false; break; }
  if( ERROR == func2(p3, p4) ) { bOk = false; break; }
  break;
}
if(!bOk)
{
   cout << ...;
   return;
}


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