开发者

How to use boost::object_pool<>::construct with a non const reference as a ctor parameter?

Is it somehow possible to use boost::object_pool<>::construct with开发者_JAVA百科 non const references?

The following snippet doesn't compile (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 complains about not being able to convert bar & to const bar &. Looking at boost::object_pool<>::construct the reason ist clear:

element_type * construct(const T0 & a0)

I can't make the ctor parameter const though. Is there a trick to make boost::object_pool<> work with my foo class?


Use 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 makes a reference_wrapper. Because that uses a pointer, it can be copied around however you wish, and implicitly dereferenced into a reference to the original value.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜