ho fatto questa semplice classe, che ancora sta giocando con la mia mente:Accesso classe annidata privato
class A {
private:
class B {};
public:
B getB() {
return B();
};
};
A partire dal C++ 03, questa classe compila bene, ma non c'è proprio nessun sguardo piacevole modo per assegnare il risultato di getB()
ad un lvalue, nel senso che:
A::B b = A().getB();
non si compila.
ho ottenuto utilizzando un modello intermedio, in questo modo:
template <typename T>
struct HideType {
typedef T type;
};
HideType<A::B>::type b = A().getB();
Ma questo sembra proprio terribile, per questo semplice compito di ottenere una variabile lvalue A :: B.
Questo non è più vero a partire da C++ 11, o almeno non è con gcc. Questo codice non è ancora valido:
A::B b = A().getB();
Ma questo è valida:
auto b = A().getB();
C'è una scappatoia nel rispetto standard per questo?
Rilevante: http://stackoverflow.com/questions/13532784/why-can-i-use-auto-on-a-private-type – OMGtechy
non riesco a [ 'HideType :: tipo b = .. .'] (http://ideone.com/jwsXhG) da compilare, potresti mostrare un MCVE dove accade? Potresti essere interessato alla [struttura di rapina] di litb (http://stackoverflow.com/questions/15110526/allowing-access-to-private-members) per un'alternativa. –