2012-05-13 7 views
11

Niedawno odkryłem doskonałe wzmocnienie biblioteki :: akumulatory i chciałbym użyć jej do zastąpienia części mojego kodu, który gromadzi statystyki.Podsumowując dwa przykłady boost :: accumulator_set

Jedno nie mogę znaleźć w dokumentacji jest umiejętność Podsumowując dwa zestawy akumulatorowe, jak w operatora + =

Przykład:

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

W jaki sposób można to osiągnąć za pomocą dostępnego API? Nie wiem, czy można to zaimplementować dla wszystkich rodzajów akumulatorów w bibliotece (może nie dla ogona), ale z pewnością może być dla ważnych rzeczy, takich jak liczenie, suma, średnia, moment, kowariancja, itp.

+0

Zapominasz też o "zwrócić * to;", chociaż nie ma to związku. – Matt

+0

@Matt, obok punktu, ale nadal warto naprawić ... – killogre

Odpowiedz

3

Niestety ta funkcja nie jest dostępna w Boost.Accumulators, prawdopodobnie dlatego, że połączenie działa tylko w przypadku niektórych statystyk.

Istnieje a ticket on the Boost tracker z pytaniem o taką funkcję combine.

+0

Dzięki. Doszedłem do tego samego wniosku po rozejrzeniu się i umieszczeniu na liście mailingowej doładowania. Nie zdawałem sobie sprawy z tego biletu, mimo że został otwarty 4 lata temu! Moje pytanie dotyczy tego, czy istnieje jakieś obejście statystyk, które mogą być obsługiwane. – killogre

1

Brak odpowiedniego i dostępnego operatora + = do dodania dwóch obiektów accumulator_set <> obiektów.