如何使用boost::lockfree:queue
个对象?
我正在尝试编写一个通过默认构造函数构造此类对象的应用程序,但它在boost源中给出了一个断言失败:
BOOST_ASSERT(has_capacity);
如何使用此类的默认构造函数?我是否需要通过模板参数指定队列的大小?
答案 0 :(得分:7)
容量可以静态给出,因此它甚至之前默认构造函数。
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;
}
答案 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;
}