Ich habe Code wie folgt aus:Kann ich dies ohne ein Makro (in C++ 11) tun?
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;
}
}
Es sollte beachtet werden, dass ich sie nicht in einer Schleife setzen kann (Mein Code ist dies ähnlich, aber nicht genau dieser Code)
Der if-Block ist sehr hässlich und ich kann Ballen es wie folgt zu schreiben:
#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);
}
Meine Frage ist:
gibt es einen besseren Weg, dies zu tun, wenn ich C++ 11 verwende?
Das Problem mit diesem Code ist:
ich es nicht leicht debuggen können.
Das Makro befindet sich nicht in einem Namespace und möglicherweise Konflikt mit anderen Makros.
Update 1
Wie hier die meisten der Antwort versucht, das Problem in dem spezifischen Code zu lösen, wenn ich für die allgemeine Lösung suchen, ich specifc Fragen zu diesem Code verwandt bin zu fragen:
1 - Kann ich Lambda verwenden, um das Makro nachzuahmen?
2- Kann ich einen consExpr verwenden, um ein Makro nachzuahmen?
3- Jede andere Möglichkeit, ein MACRO compilerfreundlich nachzuahmen (mit dem gleichen Ergebnis wie ein Makro), damit ich sie leicht debuggen kann?
'Aufgabe (1) && Aufgabe (2) && Aufgabe (3) && ...'? –
Denken Sie daran, dass der boolesche Operator '&&' kurzgeschlossen ist. Dies bedeutet, dass Sie diese in einer großen Kette von '&&' zusammenketten können, und sobald die erste Funktion fehlschlägt, wird der Rest nicht aufgerufen. –
@KerrekSB: das ist gut, aber ich erwähnte nicht, dass es andere Codes zwischen aufrufenden Aufgaben gibt, und ich werde meinen Beispielcode aktualisieren, um es zu präsentieren. Also ist deine Lösung leider nicht geeignet. (das ist der Grund, dass ich sie nicht auf eine Schleife setzen kann, wie in der ursprünglichen Frage erklärt) – mans