2010-08-11 30 views
0

是否有可能使用boost :: object_pool <> ::帶有非const引用的構造?如何使用boost :: object_pool <> ::構造與非const引用作爲ctor參數?

下面的代碼片段無法編譯(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抱怨不能夠吧&轉換爲const酒吧&。綜觀的boost :: object_pool <> ::構造的原因IST明確:

element_type * construct(const T0 & a0) 

我不能讓構造函數參數常量雖然。有沒有一個技巧可以使boost :: object_pool <>與我的foo類一起工作?

回答

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。因爲它使用指針,所以可以根據需要複製它,並隱式地解引用到原始值的引用中。

相關問題