1

我喜欢Boost Templated 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;
};

If code outside of MyCircularBuffer needs to be notified of the event, you can implement some variant of the Observer pattern, use Boost.Function or use some other callback mechanism.

于 2011-08-19T06:09:16.887 回答
1

它不会触发事件。您必须在每次添加时手动检查它是否已满,如果是,则执行一些过程。

这通常通过将容器包装在用户创建的对象中来完成,以便您可以监视缓冲区的添加。

或者,换句话说,您不需要通用解决方案;只需编写一个使用容器并自动刷新它的对象。

于 2011-08-19T06:07:30.820 回答