ich einen Code haben, die wie folgt aussieht:Werden "typename" -Direktiven nicht von Compilern implementiert?
namespace myLibrary
{
class A
{
public:
struct Nested
{
...
};
...
};
}
In einigen anderen Teilen des Codes, ich brauche A. zugreifen Da ich lesbaren Code mag, ich wie die using-Direktive auch:
using myLibrary::A;
...
A a;
Nun irgendwann muss ich meine geschachtelten Klasse zuzugreifen auch, so möchte ich, so etwas schreiben:
using myLibrary::A::Nested;
Offensichtlich ist der Compiler kann nicht wissen, dass dies eine ist verschachtelte Klasse und nicht ein Klassenmitglied, und gibt mir eine Fehlermeldung:
error : using declaration can not refer to class member
Was kann ich nicht verstehen, warum dies das Problem nicht lösen:
using typename myLibrary::A::Nested;
Der Compiler noch die genaue gibt mir gleicher Fehler!
Zum Glück, ich habe Alternativen:
// Using a typedef
typedef myLibrary::A::Nested Nested;
// Using the new C++11 syntax for type aliasing
using Nested = myLibrary::A::Nested;
aber ich würde verstehen, warum die mit Typnamen Richtlinie nicht funktionierte. Tut es nicht, was ich denke, dass es tut? Oder ist es nicht von Compilern implementiert? Wenn es das letztere ist, gibt es einen Grund dafür?
Soweit ich sagen kann, ist es nur für Namespace-Mitglieder, nicht Klassenmitglieder: http://en.cppreference.com/w/cpp/keyword/using – DiscoStu
@DiscoStu: vielleicht, aber in diesem Fall, warum das Schlüsselwort "typename" einführen? Es scheint zu funktionieren mit der Verwendung von: http://en.cppreference.com/w/cpp/language/using_declaration – Eternal
In welchem Kontext versuchen Sie die using-Deklaration zu verwenden? – dyp