0
對於大型項目的需求,我需要typedef模板類的一個對象,這個對象由參數實例化。typedef一個帶參數的模板化類
Foo< A, B, C > FooItem(bar1, bar2);
FooItem
是對象,與bar1
和bar2
構成。
有沒有辦法typedef這個對象(它必須被重新使用到另一個模板作爲一種類型)?
對於大型項目的需求,我需要typedef模板類的一個對象,這個對象由參數實例化。typedef一個帶參數的模板化類
Foo< A, B, C > FooItem(bar1, bar2);
FooItem
是對象,與bar1
和bar2
構成。
有沒有辦法typedef這個對象(它必須被重新使用到另一個模板作爲一種類型)?
您無法使用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
怎麼樣構建新的類?
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;
'typedef Foo my_foo;'? (術語nitpick:你不能typedef對象) –
你不能typedef一個對象,只有一個類型。 'typedef Foo < A, B, C > FooType; FooType FooItem(bar1,bar2);' – 2012-11-30 14:33:52
您可以使用宏,但是有什麼意義? bar1和bar2可能不在任何位置,因此它不是一個廣泛適用的宏。如果bar1和bar2是基元,你總是可以對你的模板進行子類化並對其值進行硬編碼。 – Alex