2012-07-31 35 views
5

I'v phải đối mặt với một số vấn đề, và không thể quyết định giải pháp chính xác là gì.làm thế nào để vượt qua constinity make_shared

Dưới đây là ví dụ mã để minh hoạ:

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

} 

Vấn đề là tôi không thể tạo ra dụ shared_ptr vì make_shared được và downpasses đối số TestClass constructor là "const A1 &, const A2 & ... "như được ghi lại:

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

Tôi có thể lừa bằng cách tăng :: được chia sẻ (mới ...) hoặc viết lại hàm tạo cho tham chiếu const, nhưng có vẻ không phải như vậy.

Thnx trước!

+0

thể trùng lặp của [tăng làm \ _shared mất trong một tham chiếu const. Bất kỳ cách nào để giải quyết vấn đề này?] (Http://stackoverflow.com/questions/1373896/boost-make-shared-takes-in-a-const-reference-any-way-to-get-around-this) – BenC

Trả lời

11

Bạn có thể sử dụng boost::ref để quấn luận lên, ví dụ:

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

Cảm ơn rất nhiều! Tôi sẽ học bởi hart rằng hòa bình của doc tăng :) – sohel

Các vấn đề liên quan