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

Assertion failure in case of boost::lockfree:queue default constructor

本文关键字:情况下 断言 构造函数 失败 默认 boost lockfree queue      更新时间:2023-10-16

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

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

BOOST_ASSERT(has_capacity);

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

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

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

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

科里鲁现场观看

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

您可以改用队列的 size_type 构造函数,例如:

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