2011-05-11 12 views
5

Hay una clase en nuestro código, por ejemplo, clase C. Quiero crear un vector de objetos de la clase C. Sin embargo, tanto el constructor de copia como el operador de asignación se declaran deliberadamente como private. No quiero (y tal vez no esté permitido) cambiar eso.C++ stl vector para las clases con copia privada constructor?

¿Hay alguna otra forma limpia de usar/definir vector<C>?

Respuesta

8

En su lugar, podría usar vector<C*> o vector<shared_ptr<C>>.

+2

No si te importa el rendimiento ... – Tara

1

No, no lo es, std::vector requiere concepto asignable. Los autores de C deben haber tenido una buena razón para prohibir esto, debe seguir con lo que proporcionan para copiar/asignar instancias de C. O bien utiliza los punteros como se sugirió anteriormente, o C proporciona otro mecanismo para copiar/asignar a sí mismo. En este último caso, puede escribir un tipo de proxy asignable para C.

1

he logrado hacerlo mediante el uso de sólo dos amigos:

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); 

ponerlos dentro de su declaración de la clase y listo!

Estoy usando gcc 5.3.1.

+0

Esto no funciona en Visual Studio Express 2015 –

Cuestiones relacionadas