Zugriff auf private verschachtelte Klasse
Ich habe diese einfache Klasse gemacht, die immer noch mit meinem Verstand spielt:
class A {
private:
class B {};
public:
B getB() {
return B();
};
};
Als C ++ 03 kompiliert diese Klasse gut, aber es gibt einfach kein schön aussehender Weg, um das Ergebnis von @ zuzuweisgetB()
auf einen Wert in dem Sinne, dass:
A::B b = A().getB();
Kompiliert nicht.
Ich habe es mithilfe einer Zwischenvorlage erhalten, und zwar auf folgende Weise:
template <typename T>
struct HideType {
typedef T type;
};
HideType<A::B>::type b = A().getB();
Aber das sieht einfach furchtbar aus, für diese einfache Aufgabe, eine A :: B-Wertvariable zu erhalten.
Dies ist ab C ++ 11 nicht mehr wahr oder zumindest nicht mit gcc. Dieser Code ist immer noch nicht gültig:
A::B b = A().getB();
Aber dieses ist gültig:
auto b = A().getB();
Ist diesbezüglich eine Lücke in der Norm?