如何使用boost :: object_pool <> :: construct和非const引用作为ctor参数?

Jan*_*ard 0 c++ boost memory-management pool

以某种方式使用boost :: object_pool <> :: construct和非const引用是否可行?

以下代码段无法编译(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));
}
Run Code Online (Sandbox Code Playgroud)

VS2010抱怨无法将bar转换为const bar&.看看boost :: object_pool <> :: construct,原因很清楚:

element_type * construct(const T0 & a0)
Run Code Online (Sandbox Code Playgroud)

我不能使ctor参数const.是否有一个技巧使boost :: object_pool <>与我的foo类一起工作?

GMa*_*ckG 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));
}
Run Code Online (Sandbox Code Playgroud)

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