Как создать псевдоним для шаблонов классов?

Я хочу, чтобы 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;
Другие вопросы по тегам