2017-02-23 24 views
0

サードパーティライブラリ内にクラスAの宣言がありますので、変更できません。 クラスBの宣言を使用してメソッドに渡す必要があります。は、クラスAを変更せずに行う方法ですか?Union内のクラスへのアクセス

は、私はこれをしようとすると:

#include <iostream> 
using namespace std; 
class A 
{ 
    public: 
    union { 
     class B 
     { 
      public: 
      int x; 
     }; 
    }un; 
}; 

void foo(A::B & test) 
{ 
} 

int main() { 
    A::B test; 
    test.x=10; 
    cout << test.x << endl; 
    return 0; 
} 

私はエラーを取得する:

error: B is not a member of A

Live Example!

私の仮定はBは無名の名前空間にあるので、それが起こるということです。

PS:

union {... 

へ:私はからunion の宣言を変更することができれば

A::T::B test; 

答えて

1

次のことができます。これは、ことにより、簡単な実行されます

union T {... 

decltypeを使用してユニオンのタイプを取得すると、01にアクセスできます:

decltype(std::declval<A&>().un)::B test; 

coliru example

+0

うわー!それは速かった!ありがとう、私はこれもC + + 03のために行うことができますか? – Rama

関連する問題