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"?