2013-01-03 106 views
1

我想MyVector可以選擇std :: vector或boost :: container :: vector。如何實現它?我可以使用宏,但是我被告知它們不是很安全。謝謝。如何爲類模板生成別名?

#define MyVector std::vector 
// #define MyVector boost::container::vector 

回答

11

C++ 11具有別名模板。你可以這樣做:

template <typename T> 
using MyVector = std::vector<T>; 
//using MyVector = boost::container::vector<T>; 

,然後用它像這樣:

MyVector<int> x; 

在C++ 03你要麼使用宏或元函數。

template <typename T> 
struct MyVector { 
    typedef std::vector<T> type; 
    //typedef boost::container::vector<T> type; 
}; 
// usage is a bit tricky 
MyVector<int>::type x; 
// ... or when used in a template 
typename MyVector<T>::type x; 
+0

嗯...我相信有一些尷尬與'type'成員typedeffing兩種不同類型的:) – xtofl

+0

@xtofl哎呀,忘了評論它。 –