У меня есть несколько функций, которые пытаются оценить некоторые данные. Каждая функция возвращает 1, если она может успешно оценить данные, или 0, если она не может. Функции вызываются одна за другой, но выполнение должно прекратиться, если одна из них возвращает значение 1.
Примеры функций выглядят так:
int function1(std::string &data)
{
// do something
if (success)
{
return 1;
}
return 0;
}
int function2(std::string &data)
{
// do something
if (success)
{
return 1;
}
return 0;
}
... more functions ...
Как бы был самый ясный способ организовать этот поток? Я знаю, что могу использовать операторы if как таковые:
void doSomething(void)
{
if (function1(data))
{
return;
}
if (function2(data))
{
return;
}
... more if's ...
}
Но это кажется многословным и имеет огромное количество слов, которые нужно набрать. Другой вариант, о котором я подумал, - это вызвать следующую функцию из возвращаемого 0 функции, например:
int function1(std::string &data)
{
// do something
if (success)
{
return 1;
}
return function2(data);
}
int function2(std::string &data)
{
// do something
if (success)
{
return 1;
}
return function3(data);
}
... more functions ...
Делаем вызов чище, потому что вам нужно только вызвать функцию1 (), чтобы оценить, насколько вам нужно, но, кажется, сделать код сложнее в обслуживании. Если в середину потока необходимо вставить еще одну проверку или изменить порядок вызовов, то все функции после новой необходимо будет изменить, чтобы учесть ее.
Я упускаю какой-то умный ясный способ C ++ для достижения такого рода потока программ или это один из этих методов лучше всего. Сейчас я склоняюсь к методу if, но чувствую, что что-то упустил.