2012-11-30 33 views
0

對於大型項目的需求,我需要typedef模板類的一個對象,這個對象由參數實例化。typedef一個帶參數的模板化類

Foo< A, B, C > FooItem(bar1, bar2); 

FooItem是對象,與bar1bar2構成。

有沒有辦法typedef這個對象(它必須被重新使用到另一個模板作爲一種類型)?

+0

'typedef Foo my_foo;'? (術語nitpick:你不能typedef對象) –

+1

你不能typedef一個對象,只有一個類型。 'typedef Foo < A, B, C > FooType; FooType FooItem(bar1,bar2);' – 2012-11-30 14:33:52

+0

您可以使用宏,但是有什麼意義? bar1和bar2可能不在任何位置,因此它不是一個廣泛適用的宏。如果bar1和bar2是基元,你總是可以對你的模板進行子類化並對其值進行硬編碼。 – Alex

回答

2

您無法使用typedef 對象。您可以鍵入類型。 (線索是在名字!)

對於對象,你想引用如果你需要一個較短的手柄:

typedef Foo<A, B, C> FooABC; 

FooABC FooItem(bar1, bar2); 

auto & f = FooItem; // 'f' is a FooABC & 

auto copy_of_f = f; // this is a FooABC 
0

怎麼樣構建新的類?

template <typename T1, typename T2, typename T3> 
struct Foo1 : public Foo<T1,T2,T3> 
{ 
    Foo1() 
    : Foo<T1,T2,T3>(bar1, bar2) //bar1, bar2 - global or static objects? 
    {} 
// ......  
}; 

Foo1<int, char, double> a; 
//.... 
typedef Foo1<A,B,C> FooItem; 
FooItem b;