2010-08-11 7 views
0

Est-il en quelque sorte possible d'utiliser boost :: object_pool <> :: construct avec des références non const?Comment utiliser boost :: object_pool <> :: construct avec une référence non const comme paramètre ctor?

L'extrait suivant ne compile pas (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 se plaint de ne pas être en mesure de convertir un bar & à la barre const &. En regardant boost :: object_pool <> :: construire la raison ist claire:

element_type * construct(const T0 & a0) 

Je ne peux pas le paramètre cteur const bien. Y a-t-il un truc à faire pour booster :: object_pool > travailler avec ma classe foo?

Répondre

5

Utilisation 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 fait un reference_wrapper. Parce que cela utilise un pointeur, il peut être copié comme vous le souhaitez, et implicitement déréférencé dans une référence à la valeur d'origine.

Questions connexes