que faltan algunos puntos básicos. Puede tener:
- Un estáticamente asignado serie -
char arr[10];
- Un dinámicamente asignado serie -
char* arr = new arr[10];
tamaño El primero de uno es conocido en tiempo de compilación (porque el tamaño es una constante), por lo tanto, puede preasignar un espacio de memoria para ello, el otro no, por lo que debe asignar memoria para ello durante el tiempo de ejecución.
STL/TR1/Boost proporciona envolturas para ambos tipos de matrices. Esos no son solo envoltorios por conveniencia, sino también por seguridad (control de rango en algunas situaciones) y potencia (iteradores). Para ambos casos tenemos un envoltorio separado:
- estáticamente asignada array envoltura
boost::array<char,10> arr;
- dinámicamente asignada envoltura array
std::vector<char> arr;
Este último tiene la ventaja de ser auto cambio de tamaño, y permitiendo el cambio de tamaño, además a ser dinámicamente asignables. boost::array
por otro lado, imita una construcción type arr[const]
.
Por lo tanto, debe decidir si desea que la clase tenga memoria estáticamente asignada, o dinámicamente. Lo primero, solo tiene sentido si el almacenamiento de las clases es de tamaño fijo o uno de los pocos tamaños fijos. Esto último tiene sentido en todos los demás casos.
reserva estáticamente sería utilizar plantillas
template < size_t N >
class MyClass {
private:
boost::array< int, N > array;
public:
MyClass(boost::array< int, N > array) : array(array) {};
};
// ...
boost::array<int, 4> array = {{1,2,3,4}};
MyClass<4> obj(array);
Pero crearía código separado para cada tamaño de la clase, y no serían interoperables (esto se puede evitar sin embargo).
asignados dinámicamente utilizaría vectores
class MyClass {
private:
std::vector<int> array;
public:
MyClass(const std::vector<int>& array) : array(array) {};
};
No tenga miedo de vectores, los tratan como matrices asignados dinámicamente - la resizingness de vectores es un beneficio adicional que no afecta al rendimiento casi al todas.
El error mencionado es sobre 'boost :: array', y él parece interpretarlo correctamente –