是否可以通过非 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 & 转换为 const bar &。查看 boost::object_pool<>::construct 原因很清楚:
element_type * construct(const T0 & a0)
虽然我不能使 ctor 参数为 const。有什么技巧可以让 boost::object_pool<> 与我的 foo 类一起工作吗?
最佳答案
使用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
。因为它使用指针,所以可以随心所欲地复制它,并隐式取消引用为对原始值的引用。
关于c++ - 如何将 boost::object_pool<>::construct 与非 const 引用一起用作 ctor 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3455493/