2010-08-11 6 views
0

boost :: object_pool <> :: const가 아닌 참조를 사용하여 어떻게 든 사용할 수 있습니까?boost :: object_pool <> :: construct를 non const reference와 함께 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를 줄 &에 줄 &을 변환 할 수 없다는 불평. 부스트를 보면 :: object_pool <> :: 명확한 이유 표준시를 구성 :

element_type * construct(const T0 & a0) 

내가 비록 ctor에 매개 변수를 const 할 수 없습니다. 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::refreference_wrapper한다. 이 포인터는 포인터를 사용하기 때문에 원하는대로 복사 할 수 있으며 암시 적으로 원래 값에 대한 참조로 역 참조됩니다.