2016-09-28 4 views
0

これはC++言語の限界を知るための質問です。別のクラスのtypedefを循環的に使用する

ほとんどの循環クラスの依存関係は、前方宣言とポインタで解決できます。

しかし、私は、これは何とか解決することができるかどうか疑問:

人間の目でそれを解析
struct Y; // forward declaring Y does not solve the problem 

struct X { 
    using T = int; 
    using Other = Y::T; //error: incomplete type 'Y' named in nested name specifier 
}; 

struct Y { 
    using T = float; 
    using Other = X::T; 
}; 

、あなたはY::Tが何かに依存しないため、このコードでX::Otherは自明floatとして理解することができることを簡単に確認することができます。しかし、私はtypename Y::T = float;のようなもの(しかし、C++の未知の暗いコーナーが常にある)や、上記のtypedefを許すメソッドやイディオムなど、 "typedefを宣言する"ことができる構文は知らない。

これを解決する方法はありますか? (具体的には、各クラスは他のクラスの型定義を使用しています - クラス外の型定義を移動することなく)

答えて

1

Xをテンプレート構造体にすることができます。このようなもの。

template <typename YType> 
struct X { 
    using T = int; 
    using Other = typename YType::T; 
}; 

struct Y { 
    using T = float; 
    using Other = X<Y>::T; 
}; 

int main() 
{ 
    X<Y> x; 
} 

これは完璧な解決策ではありませんが、このようなコーナーケースがある場合、ハッキングを行う必要があることがあります。

+0

これは私が考えていたものです。他の解決策が存在するかどうか不思議です。 – bolov

関連する問題