Macro definition
-
ich möchte gerne einen Macro bauen, damit man in verschiedenen Situationen files dynamisch inkludieren.
z.B.#define MYCOUT #undef cout #include "mycout.h"dann kann ich mein eigenes cout benutzen
das Problem soll aber nicht durch namespace gelöst werden.
wie macht ich das?
-
geht nicht da man # in markos garnicht verwenden kann
#undef coutgeht nicht cout ist ne klasse
das Problem soll aber nicht durch namespace gelöst werden.
wie macht ich das?dafür sind sie doch da !
und sonst geht vieleicht
#ifdef MYCOUT # include "mycout.h" #else # include <iostream> #endif
-
wie wäre es denn mit folgendem:
#ifdef USE_MYCOUT #define cout mycout #endifDann würde ein Aufruf:
cout << "Hallo" << endl;vom Präprozessor expandiert in:
mycout << "Hallo" << endl;Wobei ich einen solchen Programmierstiel in meinen Projekten verbieten würde. Ich verwende sowieso kein "using namespace std", sondern qualifiziere immer vollständig mit std::cout. Dann funktioniert das nicht mehr.
Noch schwerwiegender ist es, daß ich beim lesen des Codes nicht auf Anhieb erkennen kann, daß nicht cout verwendet wird. Wenn ich im Sourcecode cout sehe, erwarte ich, daß die Ausgabe auf der Standardausgabe erscheint. Wenn wirklich alternierende Streams verwendet werden sollen, sollte das im Source ersichtlich sein, indem man das parametrisiert. Etwa so:
void f(std::ostream& out) { out << "Hallo" << std::endl; } #ifdef USE_MYCOUT f(mycout); #else f(std::cout); #endifDann ist es ersichtlich, daß die Funktion f auf irgendeinen Ausgabestream schreibt und da, wo ich meine Verzweigung habe, sehe ich, daß hier einmal mycout und einmal std::cout verwendet wird.
-
das Problem soll aber nicht durch namespace gelöst werden.
wie macht ich das?dafür sind sie doch da !
nicht unbedingt verwendbar.
Bsp Lösung:MacC.h aus c datei
struct MacDreck { float KalorienProzent; float FettProzent; };MacCPlus.h aus cpp Datei
class MacDreck { public: float anderKalorienProzent; float anderFettProzent; };Vorausgesetzt: du kannst nicht in cpp files namespace benutzen, weil es ist in einem Plattform definiert, was namespace nicht unterstützt.
in us2Mac.h (Z.B)
#define MacDreck MacDreckCpp #include "MacCPlus.h" #undef MacDreck #include "MacC.h"dann wenn du in us2Mac.cpp
schreib:MacDreck dr1 // C MacDreck MacDreckCpp dr2 //c++ MacDreck
-
Vorausgesetzt: du kannst nicht in cpp files namespace benutzen, weil es ist in einem Plattform definiert, was namespace nicht unterstützt.
Was willst du überhaubt machen ?
-
also folgende Situation:
du willst 2 header Dateien in einer cpp Datei inkludieren. In diesen beiden Header Datei sind jeweils eine Klasse mit dem gleichen Namen definiert worden. Weil die beiden Dateien von einer dritten Patei mitgeliert sind(ohne namespace), du darfst also die Quellcode nicht ändern.
Jetzt wie kannst du die Konflict vermeiden?