C++ - namespace-alias in der gesamten Klasse Anwendungsbereich
Erwartet, dass ich in der Lage sein, die Verwendung eines namespace-alias in der Deklaration einer Klasse, sondern ein compiler syntax error.
struct MyClass
{
namespace abc = a_big_namespace;
void fn() {
abc::test();
}
};
Nur so kann ich es auf der Arbeit ist es, den alias in jeder Funktion.
void fn() {
namespace abc = a_big_namespace;
abc::test();
}
Zusätzlich möchte ich in der Lage sein, um den alias für die Funktion Parameter. Ich habe nicht gefunden ein work-around dafür.
void fn(abc::testType tt) {
abc::test(tt);
}
Gibt es eine Möglichkeit, das zu tun, was ich will?
EDIT: meine Lösung
Fand ich, dass ich nicht brauchen Unbenannte namespace für mein spezielles problem und kann einfach nicht dieses:
namespace myspace
{
namespace abc = a_big_namespace;
struct MyClass
{
void fn(abc::testType tt) {
abc::test(tt);
}
};
}
Wechseln-die andere Bibliothek, das ist, was mein alias-namespace bezieht sich auf ich nur den alias ändern. Diese Methode erlaubt es sogar, die mich die gleiche Klasse in einer einzelnen Datei zweimal, jedes mal auf eine andere Bibliothek.
Vielen Dank für Ihre Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Namespace-alias in der definition der Klasse ist illegale, wie angegeben durch die language-Spezifikation.
Seine erlaubt in nur im namespace-Gültigkeitsbereich oder die Funktion scope.
Können Sie den alias im namespace-Gültigkeitsbereich. Aber das wird auf Dauer alias die verwendet werden können von anderen Dateien genauso. Aber die Lösung ist ganz einfach : Sie können Unbenannte namespace, um zu verhindern, alias (und damit alle Symbole aus den großen namespace) nicht sichtbar von anderen Dateien. Dies ist, wie es getan werden kann:
Den alias ist nicht sichtbar, aus anderen Dateien. Beim kompilieren
OtherFile.cpp
GCC (4.5.0) sagt,Das beweist, dass die alias
abc
sichtbar ist nur inMyFile.cpp
. Dank Unbenannte namespace.Demo : http://www.ideone.com/2zyNI (obwohl es nicht zeigen, OtherFile-Konzept. Ich kann nicht mehr als eine Datei in ideone.com)
Rahmen einer namespace-alias ist ein code-block.
So können Sie es in jedem code-block.
ABER Sie können nicht in einer Klasse, denn das bedeutet es ist ein Mitglied der Klasse.
Ein namespace-alias kann nicht Mitglied sein.
Mehr über namespace-Aliase:
Was ist der Umfang eines namespace-alias in C++?
Namespaces
Es funktioniert, wenn Sie erklären, die alias außerhalb der struct.
Können Sie natürlich auch die alias außerhalb der Klasse: