Tengo un objeto complejo (para mí) con aproximadamente 20 miembros de datos, muchos de los cuales apuntan a otras clases. Entonces, para el constructor, tengo una larga y compleja lista de inicialización. La clase también tiene una docena de diferentes constructores, lo que refleja las diversas formas en que se puede crear la clase. La mayoría de estos elementos inicializados no se modifican entre cada uno de estos diferentes constructores.¿Manejando una clase con una larga lista de inicialización y múltiples constructores?
Mi preocupación aquí es que ahora tengo una gran tirada de código copiado (o mayormente copiado) que, si necesito agregar un nuevo miembro a la clase, puede no entrar en cada una de las listas de inicialización del constructor.
class Object
{
Object();
Object(const string &Name);
Object (const string &Name, const string &path);
Object (const string &Name, const bool loadMetadata);
Object (const string &Name, const string &path, const bool loadMetadata);
}
Object::Object() :
name(),
parent_index (0),
rowData (new MemoryRow()),
objectFile(),
rows (new MemoryColumn (object_constants::RowName, OBJECTID, object_constants::ROWS_OID)),
cols (new MemoryColumn (object_constants::ColName, OBJECTID, object_constants::COLS_OID)),
objectName (new MemoryColumn(object_constants::ObjName, STRING, object_constants::short_name_len, object_constants::OBJECTNAME_OID)),
parent (new MemoryColumn(object_constants::ParentName, STRING, object_constants::long_name_len, object_constants::PARENT_OID)),
parentIndex (new MemoryColumn(object_constants::ParentIndex, OBJECTID, object_constants::PARENTINDEX_OID)),
childCount (new MemoryColumn (object_constants::ChildCount, INTEGER, object_constants::CHILD_COUNT_OID)),
childList (new MemoryColumn (object_constants::ChildList, STRING, object_constants::long_name_len, object_constants::CHILD_OID)),
columnNames (new MemoryColumn (object_constants::ColumnNames, STRING, object_constats::short_name_len, object_constants::COLUMN_NAME)),
columnTypes (new MemoryColumn (object_constants::ColumnTypes, INTEGER, object_constants::COLUMN_TYPE)),
columnSizes (new MemoryColumn (object_constants::ColumnSizes, INTEGER, object_constants::COLUMN_SIZE))
{}
Luego repita lo anterior para los otros constructores. ¿Hay alguna forma inteligente de usar el constructor predeterminado para esto, y luego modificar los resultados para los otros constructores?
podría querer usar herencia privada porque este es un detalle de implementación. –
o poner la clase base en un espacio de nombres vacío? – jiggunjer