2016-05-29 80 views
0

我正在尋找一種方式來從實際的B型和C內參考的T IN的代碼下面你看到的是我的第一個傾向是嘗試並對其進行初始化。我嘗試過的其他嘗試是使用完美的轉發,繼承和向B和C添加更多模板參數。有人可以提出一條前進的道路嗎?有沒有新的構想可能會有所幫助?我接近或者這是不可能的?對於具有兩個模板變量的模板類,可以使一個var引用另一個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

其不清楚你想要達到的目標。爲什麼你的模板有兩個參數,如果無論如何一個是對另一個類型的引用? – 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的真實參考嗎?事實上,儘管U&U,A的你和B的你是兩個單獨的你。會使U(共享?)指針解決這個問題嗎? – rtischer8277

+0

@ rtischer8277使用'shared_ptr'更新了示例。 – skypjack

+0

需要使用語義變量名稱替換分析時發現的一個整體變化。目前的調用如下所示:a1.t - > ...和a1.u.u - > ...。然而,第二個u實際上是t,並且與t相同,因此這是模板模板正在初始化的智能指針。用T和t替換B和C的U和u和v,改變命名,以便可以進行期望的調用:a1.u.t - > ...。 – rtischer8277

相關問題