2012-07-31 9 views
5

Mam do czynienia z pewnym problemem i nie mogę zdecydować, co jest poprawnym rozwiązaniem.jak pokonać make_shared constness

Oto przykładowy kod dla ilustracji:

#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)); 

} 

Problemem jest to, nie mogę tworzyć shared_ptr instancji z powodu make_shared dostaje i downpasses argumenty konstruktora TestClass jako „A1 & const const A2 & ... "udokumentowane:

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

mogę oszukać z boost :: dzielone (nowa ...) lub przepisać konstruktor odniesienia const, ale wydaje się, że nie jest tak jak powinno być.

Thnx z góry!

+0

możliwe duplikat [doładowania make \ _shared zajmuje w const odniesienia. Jakikolwiek sposób obejścia tego?] (Http://stackoverflow.com/questions/1373896/boost-make-shared-takes-in-a-const-reference-any-way-to-get-around-this) – BenC

Odpowiedz

11

Można użyć boost::ref zawinąć argument w górę, to znaczy:

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

Bardzo dziękuję! Nauczę się przeze mnie, że pokój doładowania doc :) – sohel

Powiązane problemy