Begründung für Boost.Präprozessor mit Makros anstelle von einfachen Definitionen?
-
14-11-2019 - |
Frage
Beispielsweise BOOST_PP_ITERATE
und BOOST_PP_ITERATION
, wie auf Gmans Antwort zu sehen ist hier, sind Präprozessor-Makros ohne Parameter.Gibt es einen Grund, warum sie nicht nur einfach definiert und als solche ohne verwendet werden ()
?
Lösung
Im Allgemeinen kann eine Funktion wie ein Makro verwendet werden, um unbeabsichtigte Makros zu verhindern
Expansion.
Angenommen, wir haben den folgenden Makroaufruf:
BOOST_PP_CAT( BOOST_PP_ITERATION, _DEPTH )
und wir erwarten, dass dies erweitert wird in BOOST_PP_ITERATION_DEPTH
.
Wenn jedoch BOOST_PP_ITERATION
ist ein Objekt wie ein (nicht funktionierendes) Makro,
es wird vor dem Token auf eine eigene Definition erweitert
BOOST_PP_ITERATION_DEPTH
wird durch Verkettung erzeugt.
Andere Tipps
Vermutlich, weil sie Operationen ausführen:folglich sollte ihre Verwendung deutlich machen, dass Sie tatsächlich sind aufrufen etwas und nicht nur eine Konstante verwenden.