В шаблонных классах C ++ каждый экземпляр шаблона представляет собой совершенно другой класс - между vector<int *>
и vector<const int *>
существует столько различий, сколько существует между vector<int *>
и vector<string>
или любыми другими двумя классами для этого. иметь значение.
Возможно, что комитет мог бы добавить оператор преобразования в vector
в vector<U>
, как подсказывает Earwicker - и вы можете пойти дальше и предоставить собственную реализацию такой функции:
template <class A, class T>
vector<T> convert_vector(const vector<A> &other)
{
vector<T> newVector;
newVector.assign(other.begin(), other.end());
return newVector;
}
и используйте его так:
vector<int*> v1;
vector<const int*> v2;
v2 = convert_vector<const int*>(v1);
К сожалению, пока в C ++ 0x не появятся конструкторы перемещения, это будет довольно плохо с точки зрения производительности.