Ho un progetto software abbastanza grande scritto in c++ .
Qui c'è un class foo che rappresenta una struttura (con cui non intendo la struttura dei programmatori) in cui foo -oggetti possono essere parte di un foo -oggetto.
Ecco class foo nella forma più semplice:
class Foo
{
private:
std::vector<unsigned int> indices;
public:
void addFooIndex(unsigned int);
unsigned int getFooIndex(unsigned int);
};
Ogni foo -object è attualmente memorizzato in un oggetto di class bar .
class Bar
{
private:
std::vector<Foo> foos;
public:
void addFoo(Foo);
std::vector<Foo> getFoos();
}
Quindi se un foo -object dovrebbe rappresentare una struttura con un oggetto foo "interno", al momento faccio
Foo foo;
Foo innerFoo;
foo.addFooIndex(bar.getFoos().size() - 1);
bar.addFoo(innerFoo);
E per ottenerlo, ovviamente uso:
Foo foo;
for ( unsigned int i = 0; i < foo.getFooIndices().size(); ++i )
{
Foo inner_foo;
assert( foo.getFooIndices().at(i) < bar.getFoos().size() );
inner_foo = bar.getFoos().at(foo.getFooIndices().at(i));
}
Quindi questo non è un problema. Funziona e basta. Ma non è la soluzione più elegante.
Ora desidero rendere la% internafoo s "più connessa" con l'oggetto foo -object. Dovrebbe ovviamente cambiare class foo in:
class Foo
{
private:
std::vector<Foo*> foo_pointers;
public:
void addFooPointer(Foo*);
std::vector<Foo*> getFooPointers();
};
Quindi ora, per la mia domanda: come modificare delicatamente questa classe base senza rovinare l'intero codice? C'è un "modo pulito"?