へのアクセス:C++ 03のようが、私はまだ私の心で遊んで、この単純なクラス、作られたプライベートネストされたクラスに
class A {
private:
class B {};
public:
B getB() {
return B();
};
};
を、このクラスは罰金コンパイル、ない見栄えの良い方法がちょうどありません左辺値にgetB()
の結果を割り当てるために、その意味で:
A::B b = A().getB();
コンパイルされません。
template <typename T>
struct HideType {
typedef T type;
};
HideType<A::B>::type b = A().getB();
をしかし、これはA :: Bの左辺値の変数を取得するためのこの単純なタスクのために、ちょうどひどいです:
私はこの方法で、中間テンプレートを使用してそれを得ました。
これはC++ 11以降では真実ではなく、少なくともgccではそうではありません。
A::B b = A().getB();
しかし、これは有効です:このコードはまだ有効ではありません
auto b = A().getB();
は、この標準点で抜け穴はありますか?
: http://stackoverflow.com/questions/13532784/why-can-i-use-auto-on-a-private-type – OMGtechy
私は[ 'HideType :: b型を取得することはできません= .. .'](http://ideone.com/jwsXhG)コンパイルするには、どこでMCVEを表示できますか?代わりにlitbの[robber structure](http://stackoverflow.com/questions/15110526/allowing-access-to-private-members)に興味があるかもしれません。 –