C ++ stl вектор для классов с закрытым конструктором копирования? - PullRequest
5 голосов
/ 11 мая 2011

В нашем коде есть класс, скажем, класс C.Я хочу создать вектор объектов класса C.Однако и конструктор копирования, и оператор присваивания специально объявлены равными private.Я не хочу (и, возможно, не разрешено) изменить это.

Есть ли другой чистый способ использования / определения vector<C>?

Ответы [ 4 ]

8 голосов
/ 11 мая 2011

Вместо этого вы можете использовать vector<C*> или vector<shared_ptr<C>>.

1 голос
/ 06 июля 2016

Мне удалось сделать это, используя только двух друзей:

template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
    friend class std::vector;
template<typename _T1, typename _T2>
    friend void std::_Construct(_T1* __p, const _T2& __value);

Поместите их в объявление класса и вуаля!

Я использую gcc 5.3.1.

1 голос
/ 11 мая 2011

Нет, это не так, std::vector требует присваиваемой концепции.У авторов C должна быть веская причина запретить это, вы должны придерживаться того, что они предоставляют, чтобы копировать / присваивать экземпляры C.Либо вы используете указатели, как предложено выше, либо C предоставляет другой механизм для копирования / назначения себя.В последнем случае вы можете написать назначаемый тип прокси для C.

1 голос
/ 11 мая 2011

У вас есть доступ к расширенной библиотеке ?

Создание вектора повышения общих указателей .

   std::vector<boost:shared_ptr<C>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...