2016-05-29 12 views
0

私は実際のタイプBとCの中からAのtを参照する方法を探しています。下のコードでは、私の最初の傾向はそれを試して初期化することです。私が試した他の試みは、完璧な転送、継承、さらにBとCにテンプレートパラメータを追加することでした。助けになるかもしれない新しい構造がありますか?私は閉じるか、これは不可能ですか?テンプレート化された2つのテンプレート付きのクラスの場合、1つのvarをもう1つのvarを参照するようにできますか?

struct D {}; 
struct E {}; 

template< typename U1 > 
struct B 
{ 
    B() : u1(???) 
    U1& u1; // how to reference A's t variable? 
}; 

template< typename U2 > 
struct C 
{ 
    C() : u2(???) 
    U2& u2; // how to reference A's t variable? 
}; 

template< typename T, typename U > 
struct A 
{ 
    T t; 
    U u; 
}; 

int main() 
{ 
    A< D, B<D> > a1; 

    A< E, C<E> > a2; 

    return 0; 
} 
+3

そのあなたが達成したいのか明確ではありません。いずれか一方が他のタイプへの参照である場合、テンプレートは2つのパラメータを取るのはなぜですか? – user463035818

+1

実際に私はタイトルを誤解しましたが、私はまだあなたがしたいことを得ていません – user463035818

+3

これはlile [xy問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy -問題)。あなたが解決しようとしている実際の問題が何であるか教えていただければ、本当に役に立ちます – user463035818

答えて

1

私がOPテンプレートテンプレートパラメータであると思っていると思います。ここ
は、彼のコードは一度見直している:

#include<memory> 

struct D {}; 
struct E {}; 

template< typename U > 
struct B 
{ 
    B(std::shared_ptr<U> v) : u{v} {} 
    std::shared_ptr<U> u; 
}; 

template< typename U > 
struct C 
{ 
    C(std::shared_ptr<U> v) : u{v} {} 
    std::shared_ptr<U> u; 
}; 

template< typename T, template<typename> typename U > 
struct A 
{ 
    A(): t{std::make_shared<T>()}, u{t} {} 
    std::shared_ptr<T> t; 
    U<T> u; 
}; 

int main() 
{ 
    A< D, B > a1; 
    A< E, C > a2; 
    return 0; 
} 
+0

それは私がやろうとしていることです。私の悪いタイトルとテキストを解釈する必要はありませんが、本当に進んでいく方法とテンプレートテンプレートがドアを開けたかについてのいくつかの提案が本当に必要でした。あなたのコードを答えにする前に、それをA'sの真の参照にすることができますか? U&Uにもかかわらず、AのUとBのUは別々の2つのUです。 U(共有?)ポインタで解決できるでしょうか? – rtischer8277

+0

@ rtischer8277この例を 'shared_ptr'で更新しました。 – skypjack

+0

アナリティックを意味変数名に置き換えて発見された1つの美容上の変更が必要です。現在の呼び出しは、a1.t - > ...およびa1.u.u - > ...のようになります。しかし、2番目のuは実際にはtであり、テンプレートテンプレートが初期化されているので、tと同じスマートポインタです。 BとCのUとuとvの両方をTとtに置き換えると、a1.u.t - > ...のように目的の呼び出しができるように名前が変更されます。 – rtischer8277

関連する問題