如何将boost :: object_pool<> :: construct与非const引用一起用作ctor参数?

时间:2010-08-11 05:21:50

标签: c++ boost memory-management pool

在某种程度上可以使用带有非const引用的boost :: object_pool<> :: construct吗?

以下代码段无法编译(VS2010):

foo::foo(bar & b)
{
}

static boost::shared_ptr<foo> foo::create(bar & b)
{
  return boost::shared_ptr<foo>(foo_pool.construct(b),
    boost::bind(& boost::object_pool<foo>::destroy, & foo_pool, _1));
}

VS2010抱怨无法转换bar&amp;到const bar&amp;。看看boost :: object_pool&lt;&gt; ::构造原因很清楚:

element_type * construct(const T0 & a0)

我不能使ctor参数const。是否有制作boost :: object_pool&lt;&gt;的技巧和我的foo课一起工作?

1 个答案:

答案 0 :(得分:5)

使用boost::ref

static boost::shared_ptr<foo> foo::create(bar & b)
{
  return boost::shared_ptr<foo>(foo_pool.construct(boost::ref(b)),
    boost::bind(& boost::object_pool<foo>::destroy, & foo_pool, _1));
}

boost::ref成了reference_wrapper。因为它使用指针,所以可以根据需要复制它,并隐式取消引用到原始值的引用。

相关问题