(original) (raw)

Thanks, Roman. It solved the problem.
Can't believe this '&' takes me two days.

On Tue, Jan 27, 2009 at 4:26 PM, Roman Yakovenko <roman.yakovenko@gmail.com> wrote:

2009/1/27 ZaeX <zaexage@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/
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig



--
Time is mana, we must hurry