Makro-Funktion mit mehreren Zeilen für die parameter?

In C++,
Ich muss definiert ein makro.
Das makro nehmen würde als parameter einen "block" der code.

Können wir sicher mehrere Zeilen code als parameter einer makro-Funktion?

Frage ich mich, wenn :

  1. ist der folgende code gültig ist, die Gültigkeit definiert der standard, wie in "cross-platform"?
  2. gibt es eine bessere Möglichkeit, das gleiche zu tun (ich kann nicht mit template-Funktion gibt, denn ich brauche den Kontext).

#define MY_MACRO( expr ) DOSOMETHING( (expr) ); DOANOTHERTHING( (expr) ); //etc...

int my_function() {
    int o = RandomNumber();
    MY_MACRO( 
        int k = AFunction();
        k++;
        AnotherFunction( k + o ); //here I need to keep the context of the call
    ); 
}

Können wir nicht verwenden, funktoren, weil wir müssen, um Zugriff auf den Kontext des Aufrufs.
Wir können nicht lambda (snif), weil wir uns mit einem alten compiler, die das nicht bieten (und wir können es nicht ändern).

  • was ist die Verwendung dieses Makros?
  • Hast du es versuchen ? Was ist passiert ? Meine Vermutung ist, dass jeder Ausdruck "parameter", die Sie übergeben werden müssen, eingeschlossen in ().
  • Danke für den edit-Paul, konnte nicht finden, wie man die Anzeige rechts. @CharlesB : Es erzeugt code, legen Sie die Ausdrücke Parameter in mehrere Teil des generierten Codes. Das problem bezieht sich auf: können wir sicher mehrere Zeilen code als parameter einer makro-Funktion?
  • R: Wir versuchen jetzt, aber die Frage ist mehr, wenn es durch eine Norm definiert (mit mehreren Zeilen für ein makro) und wenn es cross-platforum.
  • vielleicht kann es helfen mit Antworten, wenn Sie erklären, was meinst du mit Kontext. Tun Sie, zum Beispiel, müssen alle dem Staat, in den der Anrufer innerhalb DOSOMETHING und DOANOTHERTHING? Wenn nicht, können Sie nicht einkapseln, was Sie brauchen innerhalb eines funktors, die Sie weitergeben können, um diese?
  • Als ich Hinzugefügt, das können wir einfach nicht verwenden funktoren oder lambda. Finden Sie den aktualisierten code. Die DOSOMETHING und DOANOTHERTHING makro hier nicht revelant auf die Frage, weil es die Tatsache, dass wir die Wiederverwendung mehr als einmal die expr wichtig ist. Soweit kann ich aus mehreren Zeilen code, ich bin gut mit dem makro.

InformationsquelleAutor Klaim | 2011-04-06
Schreibe einen Kommentar