2012-05-13 33 views
11

Gần đây tôi đã khám phá ra thư viện tuyệt vời boost :: accumulators, và tôi muốn sử dụng nó để thay thế một số mã của tôi tích luỹ số liệu thống kê.Tổng hợp hai trường hợp tăng cường :: accumulator_set

Một điều tôi không thể tìm thấy trong tài liệu là khả năng tổng hợp hai bộ accumulator, như trong điều hành + =

Ví dụ:

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

Làm thế nào tôi có thể đạt được điều này bằng cách sử dụng API có sẵn? Tôi không biết nếu điều này có thể được thực hiện cho tất cả các loại ắc quy trong thư viện (có thể không phải cho đuôi), nhưng nó chắc chắn có thể cho những thứ quan trọng, như đếm, tổng, nghĩa, thời điểm, hiệp phương sai, v.v.

+0

Bạn cũng quên 'return * this;', mặc dù điều này không liên quan. – Matt

+0

@Matt, bên cạnh điểm, nhưng vẫn đáng giá ... – killogre

Trả lời

3

Thật không may, tính năng này không được cung cấp bởi Boost.Accumulators, có lẽ vì việc kết hợp sẽ chỉ hoạt động đối với một số thống kê.

a ticket on the Boost tracker yêu cầu chức năng combine như vậy.

+0

Cảm ơn. Tôi đã đi đến kết luận tương tự sau khi xem xét và đăng trong danh sách gửi thư nâng cao. Tôi đã không nhận thức được vé đó, mặc dù nó đã được mở 4 năm trước! Câu hỏi của tôi là liệu có một số giải pháp cho các thống kê có thể được hỗ trợ hay không. – killogre

1

Không có toán tử thích hợp và khả dụng + = để thêm hai accumulator_set <> đối tượng.

Các vấn đề liên quan