У меня есть код, как это:Могу ли я сделать это без макроса (в C++ 11)?
void function()
{
auto isOk=task(1);
if(!isOk)
{
return;
}
// more code here
auto isOk=task(2);
if(!isOk)
{
return;
}
// more code here
auto isOk=task(3);
if(!isOk)
{
return;
}
// more code here
auto isOk=task(4);
if(!isOk)
{
return;
}
// more code here
auto isOk=task(5);
if(!isOk)
{
return;
}
// more code here
auto isOk=task(6);
if(!isOk)
{
return;
}
// more code here
auto isOk=task(7);
if(!isOk)
{
return;
}
// more code here
auto isOk=task(8);
if(!isOk)
{
return;
}
// more code here
auto isOk=task(9);
if(!isOk)
{
return;
}
}
Следует отметить, что я не могу поставить их в петлю (Мой код похож на это, но не именно этот код)
Условный блок очень некрасиво и я могу быть тюк, чтобы написать это следующим образом:
#define TASK(x) {if(!task(x)) return;}
void function()
{
TASK(1);
// more code here
TASK(2);
// more code here
TASK(3);
// more code here
TASK(4);
// more code here
TASK(5);
// more code here
TASK(6);
// more code here
TASK(7);
// more code here
TASK(8);
// more code here
TASK(9);
}
Мой вопрос:
есть ли лучший способ сделать это, когда я использую C++ 11?
Проблема с этим кодом является:
Я не могу отладить его легко.
Макрос не находится внутри пространства имен и, возможно, конфликтует с другими макросами.
Update 1
Поскольку большая часть ответа здесь пытается решить эту проблему в определенном коде, когда я ищу для общего решения, я прошу, специфические вопросы, связанные с этим кодом:
1 - Могу ли я использовать лямбда для имитации макроса?
2- Можно ли использовать constexpr для имитации макроса?
3 Любой другой способ имитировать MACRO в дружественном компиляторе (с тем же результатом, что и макрос), поэтому я могу легко отладить их?
'задачи (1) && задачи (2) && задачи (3) && ...'? –
Помните, что логический оператор '&&' short-circuit. Это означает, что вы можете связать их вместе в большой цепочке '&&', и как только первая функция выйдет из строя, остальные не будут вызваны. –
@KerrekSB: это хорошо, но я не упомянул, что между вызовами есть некоторые другие коды, и я собираюсь обновить свой примерный код, чтобы представить его. К сожалению, ваше решение не подходит. (это причина, по которой я не могу поместить их в цикл, как объяснено в исходном вопросе). – mans