Ci sono un sacco di metodi in una classe che voglio ripulire. Questi creano semplicemente una struttura di dati (con valori diversi) più e più volte e li aggiungono a un contenitore passato, in questo modo:
SomeClass::Foo(ContainerType& cont)
{
AnotherType dataItem;
dataItem.item1 = true;
dataItem.item2 = 42;
// blah blah
cont.addItem(dataItem);
// ... snip ...
AnotherType newItem;
newItem.item1 = false;
newItem.item2 = 128;
// blah blah
cont.addItem(newItem);
}
È piuttosto conveniente (codice rilevante all'interno della stessa funzione, così facile da ottenere e leggere) per avere una funzione lambda locale per ogni metodo e chiamarla invece (le modifiche future saranno limitate a un posto), in questo modo:
SomeClass::Foo(ContainerType& cont)
{
auto buildData = [](ContainerType& cont, bool flag, int value){
AnotherType dataItem;
dataItem.item1 = true;
dataItem.item2 = 42;
// blah blah
cont.addItem(dataItem);
};
buildData(cont, true, 42);
// ... snip ...
buildData(cont, false, 128);
}
anziché aggiungere una nuova funzione membro privata per fare lo stesso:
SomeClass::Foo(ContainerType& cont)
{
buildData(cont, true, 42);
buildData(cont, false, 128);
}
SomeClass::buildData(ContainerType& cont, bool flag, int val)
{
// blah blah
}
Dato che gli interni di come creare% oggetti% co_de non sono utili / necessari al di fuori del metodo AnotherType
, ecco le domande a cui chiedo assistenza:
- Ci sono altri detergenti / soluzioni migliori a questo?
- Ci sono delle insidie non ovvie nell'usare l'approccio lambda locale rispetto al nuovo approccio dei membri privati?
Al momento, ho utilizzato l'approccio locale di lambda e ho tagliato un sacco di codice ripetuto. Voglio solo assicurarmi che questa sia una strada accettabile.