在boost :: lockfree:queue默认构造函数的情况下断言失败

时间:2014-02-26 08:48:04

标签: c++ boost lock-free

如何使用boost::lockfree:queue个对象?

我正在尝试编写一个通过默认构造函数构造此类对象的应用程序,但它在boost源中给出了一个断言失败:

BOOST_ASSERT(has_capacity);

如何使用此类的默认构造函数?我是否需要通过模板参数指定队列的大小?

2 个答案:

答案 0 :(得分:7)

容量可以静态给出,因此它甚至之前默认构造函数。

boost::lockfree::queue<int, boost::lockfree::capacity<50> > my_queue;

该机制类似于模板参数的命名参数。

查看 Live On Coliru

#include <boost/lockfree/queue.hpp>
#include <iostream>

using namespace boost::lockfree;

struct X { int i; std::string s; };

int main()
{
    queue<int, boost::lockfree::capacity<50> > q;
}

答案 1 :(得分:0)

您可以改用队列的size_type constructor,例如:

#include <iostream>
#include <boost/lockfree/queue.hpp>

int main() {

    boost::lockfree::queue<int> queue( 0 );

    int pushed = 4;
    int popped = 0;

    if( queue.push( pushed ) ) {
        std::cout << "Pushed " << pushed << std::endl;
    }

    if( queue.pop( popped ) ) {
        std::cout << "Popped " << popped << std::endl;
    }

    return 0;
}