Einen Typdef in C ++ aufheben?

8

Ich arbeite an einem riesigen Projekt mit einer Datei A.h, deren Code eine Zeile hat

%Vor%

Auch da ich auf Linux aufbaue und die dlinfo-Funktion verwende, muss ich die link.h-Datei in mein Projekt einfügen. Und hier entsteht ein Konflikt, weil ich zwei Typdefinitionen mit dem gleichen Namen Elf64_Half habe. (Linux link.h enthält elftypes.h und es hat auch: typedef unsigned short Elf64_Half; ).

Was mache ich in einem solchen Fall? Ist die einzige Möglichkeit, meine Typedef in a.h zu ändern? Denken Sie daran, es ist nicht zu einfach, weil das Projekt riesig ist und ich an mehreren Stellen eine Änderung vornehmen muss.

Gibt es eine Möglichkeit, ein Typedef oder etwas zu deaktivieren?

    
tejas 12.12.2014, 01:43
quelle

3 Antworten

11

Zur Klarstellung gab Rahul Manne eine einfache Lösung. Do

%Vor%

Dies wird jede Elf64_Half in link.h durch The_Elf64_Half_I_dont_care ersetzen und somit keine Konflikte mit A.h. Solange du nicht Elf64_Half von link.h explizit verwenden willst, wird das ohne Probleme funktionieren. Sie müssen sich nur daran erinnern, dass Elf64_Half aus link.h nun The_Elf64_Half_I_dont_care heißt, falls Sie es jemals explizit in dieser Datei verwenden müssen.

    
imix 12.01.2015 16:59
quelle
6
  

Was mache ich in einem solchen Fall?

Ein gebräuchliches Mittel ist es, denjenigen, der die geringste Sichtbarkeit benötigt, hinter eine "Kompilierungs-Firewall" zu stellen. Das heißt, Ihre eigene Abstraktion / Schnittstelle zu erstellen, die die benötigte Funktionalität bereitstellt, und dann die Sichtbarkeit der enthaltenen Datei auf die * .cpp-Datei zu beschränken, indem Sie sie nur in diese * .cpp-Datei einfügen. Natürlich wäre es der * .cpp-Datei auch nicht erlaubt, die Kopfzeile mit der anderen Definition von typedef zu enthalten.

Dann verursachen die Deklarationen keinen Konflikt, weil sie niemals für dieselbe Übersetzungseinheit sichtbar sind.

In Ihrem Beispiel würden Sie wahrscheinlich einen Wrapper für die benötigten dlinfo() -Funktionalitäten erstellen. Zur Veranschaulichung:

DLInfo.hpp

%Vor%

DLInfo.cpp

%Vor%     
justin 12.12.2014 01:56
quelle
6

Hier ist ein wenig Arbeit, die ich herausgefunden habe: Wenn Sie es zuerst als etwas anderes definieren, dann können Sie es später eingeben. Siehe hier im Beispiel (Ich bin auf OS X mit g ++):

%Vor%

Die Ausgabe dieses Programms ist

%Vor%

Betrachten Sie nun dieses modifizierte Programm:

%Vor%

Die Ausgabe dieses Programms ist

%Vor%

Um Ihre Frage zu beantworten, fügen Sie Ihrem Code eine Zeile hinzu:

%Vor%

Aus Gründen der Übersichtlichkeit funktioniert das, weil Sie sie im Grunde alle umbenennen, aber Sie tun dies mit einem einzigen Befehl, anstatt alle Ihre eigenen Namen ändern zu müssen.

    
Rahul Manne 12.12.2014 02:48
quelle

Tags und Links