Sorry für diese dumme Frage, aber gibt es eine Möglichkeit, using
Direktiven auf die aktuelle Datei zu beschränken, so dass sie nicht auf die Dateien, die #include
diese Datei weitergeben?Beschränkung `using` Direktiven auf die aktuelle Datei
Antwort
Vielleicht könnte das Umschließen des einzubeziehenden Codes in seinem eigenen Namespace das gewünschte Verhalten
erreichen, da sich Namensräume auf den Umfang auswirken.
// FILENAME is the file to be included
namespace FILENAME_NS {
using namespace std;
namespace INNER_NS {
[wrapped code]
}
}
using namespace FILENAME_NS::INNER_NS;
und in einer anderen Datei
#include <FILENAME>
// std namespace is not visible, only INNER_NS definitions and declarations
...
Hey, cooler Trick! Ich denke, ich werde für diesen gehen; Danke vielmals! :) – missingfaktor
Nein, das ist nicht der Fall, weshalb Sie keine Direktiven in Header-Dateien oder anderen Dateien verwenden sollten, die Sie enthalten.
Um dies ein wenig zu erweitern - der Präprozessor (der '# include' und andere #' - Befehle handhabt) wird ausgeführt, bevor der Compiler den Code jemals sieht. Die 'using'-Direktive und andere Standardschlüsselwörter werden vom Compiler verarbeitet. Was den Compiler anbelangt, sind die Header-Dateien also eigentlich keine separaten Dateien - sie sind Code, der sich in jeder Datei befindet, in der sie enthalten sind, also auch "using" Direktiven, die du vielleicht hineinlegst. – Amber
Aah ... traurig. Danke für die Antwort trotzdem. – missingfaktor
@Rahul Es ist nicht so schlimm - Sie können (und sollten) natürlich 'using' Direktiven in Ihren .cpp Dateien verwenden. –
Technisch Sie sollten sie bis zu einem gewissen internen Namespace importieren und dann die Dinge in dieser sichtbar für den Anwender bedeutet im Namensraum deklariert machen können.
#ifndef HEADER_HPP
#define HEADER_HPP
#include <string>
namespace my_detail
{
using std::string;
inline string concatenate(const string& a, const string& b) { return a + b; }
}
namespace my_namespace
{
using my_detail::concatenate;
}
#endif
#include <iostream>
#include "header.hpp"
using namespace my_namespace;
int main()
{
std:: //required
string a("Hello "), b("world!");
std::cout << concatenate(a, b) << '\n';
}
Nicht sicher, ob es der Mühe wert ist und wie es gut spielt mit „-Argument abhängigen Lookup“.
Zu viel Mühe in der Tat. Aber immer noch eine nette Arbeit. Also, +1. :) – missingfaktor
- 1. Using Angular Custom Direktiven
- 2. Globale "Using" -Direktiven in VS2010/C#?
- 3. Using AngularJs dynamische Direktiven für benutzerdefinierte Ansicht
- 4. Beschränkung auf Handynummer
- 5. JSON-Beschränkung?
- 6. Lambda .Where Beschränkung auf Zeichenfolge
- 7. Scala: Beschränkung auf generische Klassenart
- 8. Java: Beschränkung auf Nest-Klassen?
- 9. gibt es irgendeine Beschränkung für ipa-Datei
- 10. Wie die aktuelle Datei auf Zeit mit dem Batch-Skript
- 11. Angular2 - ngclass auf Direktiven-Selektor
- 12. erklären die USING Befehl
- 13. Benutzerdefinierte Befehl für Eclipse auf aktuelle Datei
- 14. Vim: aktuelle Datei ausführen?
- 15. Verschachteln von Direktiven innerhalb von Direktiven
- 16. Wie bekomme ich Intellisense um automatisch zu beheben? Missing Using Direktiven
- 17. Using $ @ für Fehlermeldung, die Modul
- 18. aktuelle Datei von ftp
- 19. Aktuelle Auswahl als Ebenenmaske auf die aktuelle Ebene anwenden
- 20. Wie bekomme ich die aktuelle Datei, aktuelle Klasse und aktuelle Methode mit Python?
- 21. Using @property Decorator auf dicts
- 22. Beschränkung einer Spalte auf nur 2 Werte
- 23. Schnittstelle Beschränkung auf generische Methode Argumente
- 24. Cancan 2.0 - Beschränkung Berechtigungen auf ein Feld
- 25. Beschränkung für Ajax-Aufrufe auf einer Webseite?
- 26. Delphi INI readstring Beschränkung
- 27. FOS User Override eindeutige Beschränkung auf Benutzerspeicher
- 28. .htaccess mod_rewrite - Beschränkung auf Root-Verzeichnis
- 29. sqlite Beschränkung auf iphone abour Speicher
- 30. Reich einzigartige Beschränkung auf mehrere Felder
Sie können jedoch die Verwendung von Direktiven auf einen Nicht-Dateibereich beschränken, z. B. auf einen Namespace oder eine Funktion. –
Es ist viel besser, die 'using'-Direktive nicht in Headern anzuwenden. –
@David: Ich hasse es etwas wie 'std :: map>' wenn ich 'map >' eingeben kann . –
missingfaktor