2012-07-31 8 views
5

He enfrentado algunos problemas y no puedo decidir cuál es la solución correcta.cómo superar make_shared constness

Aquí está el ejemplo de código para la ilustración:

#include <boost/make_shared.hpp> 
#include <boost/shared_ptr.hpp> 

class TestClass{ 
    public: 
     int a; 
     TestClass(int& a,int b){}; 
    private: 
     TestClass(); 
     TestClass(const TestClass& rhs); 
}; 

int main(){ 
    int c=4; 
    boost::shared_ptr<TestClass> ptr; 

//NOTE:two step initialization of shared ptr  

//  ptr=boost::make_shared<TestClass>(c,c);// <--- Here is the problem 
    ptr=boost::shared_ptr<TestClass>(new TestClass(c,c)); 

} 

El problema es que no puedo crear shared_ptr ejemplo a causa de make_shared obtiene y downpasses argumentos a TestClass constructor como "const A1 &, const A2 &, ... "tal como se documenta:

template<typename T, typename Arg1, typename Arg2 > 
    shared_ptr<T> make_shared(Arg1 const & arg1, Arg2 const & arg2); 

puedo engañar con el impulso :: compartida (nueva ...) o reescribir constructor de referencias const, pero parece que no es la manera que debe ser.

Thnx por adelantado!

+0

posible duplicado de [impulso maquillaje \ _shared toma en una referencia constante. ¿Alguna forma de evitar esto?] (Http://stackoverflow.com/questions/1373896/boost-make-shared-takes-in-a-const-reference-any-way-to-get-around-this) – BenC

Respuesta

11

Puede utilizar boost::ref para envolver el argumento hacia arriba, es decir:

ptr = boost::make_shared<TestClass>(boost::ref(c), c); 
+0

¡Muchas gracias! Aprenderé por Hart esa paz de impulsar doc :) – sohel

Cuestiones relacionadas