Преобразование между векторами с разными распределителями

Я написал простой тип распределителя с отслеживанием состояния в стиле C ++ 11. Учитывая

template<typename T> class my_allocator {
   // the usual stuff
};

template<typename T> using my_vector = std::vector<T, my_allocator<T>>;

my_vector<int> x;

std::vector<int> y = x; // error

Как лучше всего разрешить преобразование из my_vector в std :: vector с использованием распределителя по умолчанию? GCC 4.7 (недавний svn) сообщает об ошибке

: запрошено преобразование из 'my_vector {aka std :: vector >} в нескалярный тип' std :: vector '

Очевидно, это можно сделать, скажем, с помощью простой функции преобразования, такой как

template<typename T> std::vector<T> to_std_vec(const my_vector<T>& v)  {
   return std::vector<T>(&v[0], &v[v.size()]);
   }

, но это кажется довольно неэлегантным. Есть ли лучшее решение в C ++ 11?

Семантика перемещения, конечно, правильна в этой ситуации, но я бы хотел, чтобы построение и присваивание копий работали без лишнего шума / набора текста.

9
задан Jack Lloyd 19 November 2011 в 00:33
поделиться