Ich arbeite an etwas Geometrie-basierten Code. Die vorliegende Aufgabe beinhaltet die Verwendung einer Begrenzungsbox zur Aufnahme der festen Probe. Nun, im Code habe ich zwei verschiedene Arten solcher Boxen entwickelt, nämlich INNER_BOUNDING_BOX
und OUTER_BOUNDING_BOX
. Der Code erwartet außerdem die Verwendung eines der beiden Felder, aber nicht beide. Ich versuche es mit dem Präprozessor zu erreichen. Ich habe weiteren Code basierend auf ein paar Makros geschrieben, nämlich USE_INNER_BOUNDING_BOX
und USE_OUTER_BOUNDING_BOX
.Bedingte Makrodefinition zur Emulation default define
#if defined(USE_INNER_BOUNDING_BOX) && defined(USE_OUTER_BOUNDING_BOX)
#undef USE_INNER_BOUNDING_BOX
#undef USE_OUTER_BOUNDING_BOX
#define USE_INNER_BOUNDING_BOX
#endif
#ifndef USE_INNER_BOUNDING_BOX
#ifndef USE_OUTER_BOUNDING_BOX
#define USE_INNER_BOUNDING_BOX
#endif
#endif
Nun, wenn ich eine bestimmte Box verwenden wollte, könnte ich definiere nur das entsprechende Makro: Ich kann durch einiges einfaches Konstrukt wie dies jederzeit ein Makro definiert ist sicherzustellen, dass. Die Schwierigkeit kommt mit Wollen für die Verwendung eines Standard-Einstellung Makro sagen USE_DEFAULT_BOUNDING_BOX
, die ich verwenden könnte, um dann definieren für eine der USE_INNER_BOUNDING_BOX
oder USE_OUTER_BOUNDING_BOX
, wenn beide oder keine von ihnen explizit definiert sind. Ich würde zu tragbarem Code neigen, aber Compiler-spezifischen Trick könnte auch passieren. Ich benutze Visual Studio 2012
.
Nicht wirklich eine Antwort auf die Frage, die Sie stellen, aber warum definieren Sie nicht einen einzigen Schalter 'BOUNDING_BOX_TO_USE' zu' INNER == 1' 'OUTER == 2'? So könnte es inhärent nicht beides sein. – Yunnosch
Ich könnte etwas ähnliches schreiben. Es hat mir damals nicht geschmerzt. :) Ich werde versuchen, es vielleicht anders umzusetzen. Es ist jedoch immer noch eine zufällige Frage und es hat Spaß gemacht, fragte ich. :) – user2338150
Diese Makroblöcke machen schon genau das, was Sie wollen: Definieren Sie eines dieser Makros, wenn entweder beide oder keines davon definiert ist. Es könnte aber auch kürzer sein. – VTT