Я написал простой тип распределителя с отслеживанием состояния в стиле 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
Очевидно, это можно сделать, скажем, с помощью простой функции преобразования, такой как
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?
Семантика перемещения, конечно, правильна в этой ситуации, но я бы хотел, чтобы построение и присваивание копий работали без лишнего шума / набора текста.