2012-05-13 2 views
11

Ho scoperto di recente l'eccellente boost di librerie :: accumulatori e vorrei utilizzarlo per sostituire parte del mio codice che accumula statistiche.Sommando due istanze boost :: accumulator_set

Una cosa che non riesco a trovare nella documentazione è la capacità di sommare due set di accumulatori, come in operatore + =

Esempio:

using namespace boost::accumulators; 
typedef accumulator_set<double, features<tag::variance> > AccumSet; 

class Foo { 
    AccumSet acc; 
public: 
    Foo& operator+=(const Foo& that) { 
     this->acc += that.acc; // error! no such operator 
     return *this; 
    } 
    double GetVariance() { return variance(acc); } 
}; 

Come posso ottenere questo utilizzando l'API disponibili? Non so se questo può essere implementato per tutti i tipi di accumulatori nella libreria (forse non per coda), ma sicuramente può essere per cose importanti, come conteggio, somma, media, momento, covarianza, ecc.

+0

Si dimentica anche di 'return * this;', anche se questo non è correlato. – Matt

+0

@Matt, accanto al punto, ma vale comunque la pena di essere sistemato ... – killogre

risposta

3

Sfortunatamente, questa funzione non è fornita da Boost.Accumulators, probabilmente perché la combinazione funzionerebbe solo per alcune statistiche.

C'è a ticket on the Boost tracker che richiede tale funzione combine.

+0

Grazie. Sono arrivato alla stessa conclusione dopo aver guardato intorno e inserito nella mailing list di boost. Non ero a conoscenza di quel biglietto, anche se è stato aperto 4 anni fa! La mia domanda è se c'è qualche soluzione alternativa per le statistiche che possono essere supportate. – killogre

1

Non esiste un operatore appropriato e disponibile + = per l'aggiunta di due oggetti accumulator_set <>.