1

Boost Templateed Circular Buffer Containerが好きですが、100%満たされたときに取得するにはどうすればよいですか?

   #include <boost/circular_buffer.hpp>

   int main() {

      // Create a circular buffer with a capacity for 3 integers.
      boost::circular_buffer<int> cb(3);

      // Insert some elements into the buffer.
      cb.push_back(1);
      cb.push_back(2);
      cb.push_back(3);

      // Here I want some function to be called (for example one that would cout all buffer contents)

      int a = cb[0];  // a == 1
      int b = cb[1];  // b == 2
      int c = cb[2];  // c == 3

      return 0;
   }

では、どのようにしてそのようなイベントをリッスンしboost::circular_buffer、たとえばすべてのバッファーの内容をcoutするのでしょうか。

4

2 に答える 2

3

circular_bufferインスタンスを独自のクラスにラップし、その上にイベント処理を実装できます。

class MyCircularBuffer
{
public:
    MyCircularBuffer() : buffer(3) {}

    void PushBack(int i)
    {
        buffer.push_back(i);
        if(buffer.size() == 3)
        {
            // buffer is full!
        }
    }
private:
    boost::circular_buffer<int> buffer;
};

外部のコードMyCircularBufferにイベントを通知する必要がある場合は、Observer パターンのバリアントを実装するか、 Boost.Functionを使用するか、その他のコールバック メカニズムを使用できます。

于 2011-08-19T06:09:16.887 に答える
1

イベントは発生しません。追加するたびに、いっぱいになっているかどうかを手動で確認する必要があります。いっぱいになっている場合は、何らかのプロセスを実行します。

これは通常、ユーザーが作成したオブジェクトでコンテナーをラップすることによって実行されるため、バッファーへの追加を監視できます。

または、別の言い方をすれば、一般的なソリューションは必要ありません。コンテナを使用して自動的にフラッシュするオブジェクトを作成するだけです。

于 2011-08-19T06:07:30.820 に答える