2012-07-31 13 views
5

私は何らかの問題に直面しており、正しい解決策が何であるかを判断できません。ここでmake_shared constnessを克服する方法

は、説明のためのコード例です:

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

} 

問題は「constのA1 &、constのA2 &、などTestClassをコンストラクタに引数を取得し、downpassesためmake_sharedの私はshared_ptrのインスタンスを作成カントです... 「文書化:

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

私は共有::ブーストとトリック(新...)またはconstの参照のコンストラクタを書き換えるが、それはそれがあるべき姿ではないと思われることができます。

Thnxです。

+0

の\ _SHAREDはconst参照になります[ブーストメイクの可能な重複を。これを回避する方法は?](http://stackoverflow.com/questions/1373896/boost-make-shared-takes-in-a-const-reference-anyway-to-get-around-this) – BenC

答えて

11

あなたはつまり、引数を包むためにboost::refを使用することができます。

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

あまりにもありがとう!私はハートでブーストドクターの平和を学ぶ:) – sohel

関連する問題