[C++-sig] ArgumentError when use the shared_ptr<T>

Roman Yakovenko roman.yakovenko at gmail.com
Tue Jan 27 09:26:06 CET 2009


2009/1/27 ZaeX <zaexage at gmail.com>:
> Hi, c++-sig:
>
> I got a problem involving shared_ptr here,
> according to some threads here I believed it should be solved by
> implicitly_convertible,
> however after many tries, I still cannot make it work. although this problem
> may look old, I really need your help or hint.
> My environment is WinXP + python 2.5.4 + boost1.36
> /////////////////////////////////////////
> class A
> {
>     std::vector<int> vec;
> public:
>     A(){}
>     A(boost::shared_ptr<A>& ptr) :vec(ptr->vec)
>     std::vector<int>& GetV(){return vec;}
> };
>
> class D
> {
>     boost::shared_ptr<A> m_aa;
> public:
>     boost::shared_ptr<A>& GetAA() {return m_aa;}
>  };
>
> implicitly_convertible<boost::shared_ptr<A>, A>();
> ///////////////////////////////////////
> I exported the A and D, and also added the implicitly_convertible
> but when I tried to do this in python:
>
> d = D()
> a = d.GetAA()
> a.GetV()
>
> Python interpreter will complains
> Boost.Python.ArgumentError: Python argument types in
>     A.GetV(A)
> did not match C++ signature:
>     GetV(class A {lvalue})
> ---------------------------------------------------------------------
> Can you give some help on this, I have been stuck here for 2 days.

I suggest you not fight with Boost.Python - pass/return
shared_ptr<...> by value.

The code will start to work.

-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/


More information about the Cplusplus-sig mailing list