Как создать псевдоним для шаблонов классов?
Я хочу, чтобы MyVector мог выбрать std::vector или boost::container::vector. Как это реализовать? Я могу использовать макросы, но мне сказали, что они не очень безопасны. Благодарю.
#define MyVector std::vector
// #define MyVector boost::container::vector
1 ответ
Решение
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;