0

是否可以将 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));
}

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

element_type * construct(const T0 & a0)

不过,我不能使 ctor 参数为 const 。有没有一个技巧可以让 boost::object_pool<> 与我的 foo 类一起工作?

4

1 回答 1

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. 因为它使用了一个指针,所以它可以随心所欲地复制,并隐式地取消引用到对原始值的引用。

于 2010-08-11T05:55:43.553 回答