Можно ли инициализировать вектор векторов не копируемых объектов?

Можно ли инициализировать вектор векторов не копируемых объектов?

class obj : private boost::noncopyable {
// ...
};

vector<vector<obj> > v(10); // OK
for(int i = 0; i < v.size(); ++i)
v[i].resize(10); // ERROR

также

vector<vector<obj> > v(10, vector<obj>(10)); // ERROR

я понимаю Зачем приведенный выше код не скомпилируется. Я спрашиваю, есть ли обходной путь. Кажется, что если std::vector была функция-член, как resize_from_zero для этого не нужен конструктор копирования, тогда это будет выполнимо.

(Мой вопрос о C ++ 03, если это имеет значение)

0

Решение

Это невозможно; C ++ 03 требует, чтобы элементы vector быть CopyConstructible и Assignable.

Ссылка: C ++ 03 [lib.containers.requirements] / 3

Тип объектов, хранящихся в этих компонентах, должен соответствовать требованиям CopyConstructible
типы (20.1.3) и дополнительные требования Assignable типы.

где «эти компоненты» означает deque, list, queue, stack, vector, map, set, bitset,

(Там может быть или не быть какой-то способ заставить его работать на конкретном компиляторе, но это выходит за рамки Standard C ++).

1

Другие решения


По вопросам рекламы [email protected]