2012-05-13 12 views
11

Ich habe kürzlich die ausgezeichnete Bibliothek boost :: accumulators entdeckt, und ich möchte sie verwenden, um etwas von meinem Code zu ersetzen, der Statistiken sammelt.Zusammenfassen von zwei boost :: accumulator_set-Instanzen

Eine Sache, die ich nicht in der Dokumentation finden, ist die Fähigkeit, zwei Akkusätze zusammenzufassen, wie es in Operator + =

Beispiel:

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); } 
}; 

Wie kann ich erreichen, das die verfügbare API? Ich weiß nicht, ob dies für alle Arten von Akkumulatoren in der Bibliothek implementiert werden kann (vielleicht nicht für Tail), aber es kann sicher für wichtige Dinge wie Anzahl, Summe, Mittelwert, Moment, Kovarianz usw.

+0

Sie vergessen auch, 'this;' zurückzukehren, obwohl das nicht verwandt ist. – Matt

+0

@Matt, neben dem Punkt, aber immer noch Wert zu beheben ... – killogre

Antwort

3
sein

Leider wird diese Funktion von Boost.Accumulators nicht bereitgestellt, wahrscheinlich weil das Kombinieren nur für einige Statistiken funktioniert.

Es gibt a ticket on the Boost tracker fragt nach einer solchen combine Funktion.

+0

Danke. Ich kam zu dem gleichen Schluss, nachdem ich mich in der Boost-Mailingliste umgesehen und gepostet habe. Ich war mir dieses Ticket nicht bewusst, obwohl es vor 4 Jahren eröffnet wurde! Meine Frage ist, ob es eine Problemumgehung für die Statistiken gibt, die unterstützt werden können. – killogre

1

Es gibt keinen geeigneten und verfügbaren Operator + = zum Hinzufügen von zwei accumulator_set <> Objekten.

Verwandte Themen