
Attached are the files in question. Thanks for the direction. Im a newbie to these lists. In my original post I was trying to post the minimal that failed, so hence I wanted to give everything in the follow-up. Ill try to find a happier middle ground for future posts. "David Abrahams" <dave@boost-consulting.com> wrote in message news:uwu4zvpit.fsf@boost-consulting.com...
Hi David,
First of all, please bring Boost.Python questions to the C++-sig: http://www.boost.org/more/mailing_lists.htm#cplussig
"David Rostowsky" <davros1@covad.net> writes:
I have a couple of really simple classes:
class MyBase { public: int x; virtual int foo(int new_x) { }; // our derived classes may or may not override this function. Coders choice. };
class MyDerived: public MyBase { public: int y; MyDerived() { y = 0; }; int Get(void) { return y; }; void Set(int val) { y = val; }; };
My main goal in life is to create an instance of MyDerived class in C++: MyDerived my_derived = new MyDerived();
and then pass the pointer to a Python script where the Python script can call any of the public member functions. Yes, I am careful to keep the pointer around in the C++ code while the Python script uses it. So I expose the class (this may or may not be the source of my problems, need help):
BOOST_PYTHON_MODULE(test) { using namespace boost::python;
class_<MyDerived>("MyDerived") .def("Get", &MyDerived::Get) .def("Set", &MyDerived::Set) ; } /* test*/
My impasse is that the virtual function seems to really give Boost hell when Im trying to pass the pointer to the class over to the python script. Heres the code snippet for that.
Please post a complete, minimal, reproducible example.
Its the conversion thats just KILLING me.
Chill, dude. You're still alive. At least someone's sending email on your behalf ;-)
If I comment out the virtual function, everything works perfectly! I can pass the pointer over to my script, it calls the public member functions, and Im happy. HOWEVER, if I put the virtual function back in, the following line of code
Well you've posted several lines there; can you be specific about which one you're having problems with?
just EXPLODES!
What does "EXPLODES" mean? Do you get a compilation error, a runtime error, or something else?
// It crashes and burns in make_ptr_instance.cpp, function get_derived_class_object() boost::python::object my_arg(boost::ref(my_derived));
// pass the pointer over to the script now. int rval = callPython("myTestFunc", "Test String argument from c++", my_arg);
-- Dave Abrahams Boost Consulting www.boost-consulting.com
_______________________________________________ Unsubscribe & other changes:
http://lists.boost.org/mailman/listinfo.cgi/boost
begin 666 test_script.py M=')Y.@T*(" @("!I;7!O<G0@9W)U;7-H#0H@(" @('!R:6YT(")0>71H;VXZ M($EM<&]R="!354-#145$140A(2$B#0IE>&-E<'0Z#0H@(" @('!R:6YT(")0 M>71H;VXZ($EM<&]R="!&04E,140N+BXB#0H-"B -"B,C(R,C(R,C(R,C(R,C M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,-"B,@5&5S="!M;V1U;&4-"B,C M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,-"F1E9B!M M>51E<W1&=6YC*&US9RP@8W!P3V)J*3H-"@T*(" @(" C(%1E<W0@=&AE(&]B M:F5C="!E>'!O<V5D(&9R;VT@8RLK("A087-S960@87,@82!F;W)M86P@<&%R M86UE=&5R*0T*(" @(" C(%-H;W<@:61E;G1I9GD@;V8@8W!P3V)J#0H@(" @ M('!R:6YT(")0>71H;VXZ($ED96YT:71Y(&]F(&5X<&]S960@8W!P3V)J.B B M+ T*(" @("!C<'!/8FHN<')I;G10='(H*0T*(" @("!P<FEN= T*#0H@(" @ M(",@4VAO=R!S=&%T92!O9B!C<'!/8FH-"B @(" @<')I;G0@(E!Y=&AO;CH@ M8W!P3V)J+D=E="@I(&]N(&5N=')Y.B(L(&-P<$]B:BY'970H*0T*#0H@(" @ M(",@0VAA;F=E('-T871E(&]F(&]B:F5C= T*(" @("!C<'!/8FHN4V5T*#DI M#0H-"B @(" @(R!3:&]W('-T871E(&]F(&]B:F5C= T*(" @("!P<FEN=" B M4'ET:&]N.B!C<'!/8FHN1V5T*"D@;VX@97AI=" Z(BP@8W!P3V)J+D=E="@I 6#0H-"B @(" @<F5T=7)N(#DY.2 -"@`` ` end begin 666 code2.cpp M#0HO+R!';&]B86P@;6]D=6QE('!O:6YT97(-"F)O;W-T.CIP>71H;VXZ.FAA M;F1L93P^(&UY7VUO9'5L93L-"@T*8VQA<W,@0F%S93$-"GL-"G!U8FQI8SH- M"@EI;G0@>CL-"@E"87-E,2@I('L@>CT@,3L@?3L-"@EV:7)T=6%L('9O:60@ M3VY+97E5<"AU;G-I9VYE9"!S:&]R="!V:7)T=6%L7VME>2D@>R!].PT*#0I] M.PT*#0IC;&%S<R!497-T0R Z('!U8FQI8R!"87-E,0T*>PT*<')O=&5C=&5D M.@T*"6EN="!X.PT*#0IP=6)L:6,Z#0H-"@E497-T0R@I('L@>" ](# [('T[ M#0H)=F]I9"!3970H:6YT('9A;"D@>R!X(#T@=F%L.R!].PT*"6EN="!'970H M=F]I9"D@>R!R971U<FX@>#L@?3L-"B @("!V;VED('!R:6YT4'1R*"D@>R!P M<FEN=&8H(D,K*R @(#H@4'1R/3!X)7 B+"!T:&ES*3L@?0T*?3L-"@T*+R\@ M4'ET:&]N('=R87!P97(@9F]R($UY0VQA<W,-"D)/3U-47U!95$A/3E]-3T15 M3$4H9W)U;7-H*0T*>PT*(" @('5S:6YG(&YA;65S<&%C92!B;V]S=#HZ<'ET M:&]N.PT*#0H@("!O8FIE8W0@=&5S=$-L87-S(#T@8VQA<W-?/%1E<W1#+"!B M;V]S=#HZ<VAA<F5D7W!T<CQ497-T0SX@/B@-"B @(")497-T0R(L(&EN:70\ M/B@I*0T*(" @+F1E9B@B1V5T(BP@)E1E<W1#.CI'970I#0H@(" N9&5F*")3 M970B+" F5&5S=$,Z.E-E="D-"B @("YD968H(G!R:6YT4'1R(BP@)E1E<W1# M.CIP<FEN=%!T<BD-"B @(#L-"@T*?2 O*B!G<G5M<V@@*B\-"@T*+R\@1G5N M8W1I;VX@<')O=&]T>7!E<PT*:6YT(&EN:710>71H;VXH<W1D.CIS=')I;F<@ M<V-R:7!T3F%M92D[#0II;G0@8V%L;%!Y=&AO;BAS=&0Z.G-T<FEN9R!F=6YC M+"!S=&0Z.G-T<FEN9R!M<V<L(&)O;W-T.CIP>71H;VXZ.F]B:F5C="8@;V)J M*3L-"@T*+R\@0V]N=F5N:65N8V4@9G5N8W1I;VYS#0IB;V]S=#HZ<'ET:&]N M.CIH86YD;&4\/B!I;7!O<G1?;6]D=6QE*'-T9#HZ<W1R:6YG(&UO9'5L95]N M86UE*0T*>PT*"75S:6YG(&YA;65S<&%C92!B;V]S=#HZ<'ET:&]N.PT*#0H@ M(" @4'E/8FIE8W0@*FUO9'5L95]P='(@/2!0>4EM<&]R=%]);7!O<G1-;V1U M;&4H8V]N<W1?8V%S=#QC:&%R*CXH;6]D=6QE7VYA;64N8U]S='(H*2DI.PT* M(" @(&EF("AM;V1U;&5?<'1R(#T]($Y53$PI#0H@(" @>PT*"0E/=71P=71$ M96)U9U-T<FEN9R@B:6UP;W)T7VUO9'5L92P@3E5,3%QN(BD[#0H)"65X:70H M,2D[#0H)?0T*(" @( T*"7)E='5R;B!H86YD;&4\/BAM;V1U;&5?<'1R*3L- M"@T*?2 O*B!I;7!O<G1?;6]D=6QE("HO#0H-"F)O;W-T.CIP>71H;VXZ.F]B M:F5C="!G971?9G5N8W1I;VXH8V]N<W0@8VAA<B J(&9U;F-?;F%M92D-"GL- M"@DO+R!";W)R;W=E9"!R969E<F5N8V4-"@E0>4]B:F5C=" J(&1I8W0@/2!0 M>4UO9'5L95]'971$:6-T*&UY7VUO9'5L92YG970H*2D[( T*"0T*(" @(&)O M;W-T.CIP>71H;VXZ.G-T<B!F=6YC3F%M92AF=6YC7VYA;64I.PT*#0H@(" @ M<F5T=7)N(&)O;W-T.CIP>71H;VXZ.F]B:F5C="AB;V]S=#HZ<'ET:&]N.CIH M86YD;&4\/BA0>41I8W1?1V5T271E;2AD:6-T+"!F=6YC3F%M92YP='(H*2DI M*3L-"@T*?2 O*B!G971?9G5N8W1I;VX@*B\-"@T*:6YT(&-A;&Q0>71H;VXH M8V]N<W0@<W1D.CIS=')I;F<@9G5N8U-T<BP@#0H)"0D@("!S=&0Z.G-T<FEN M9R!M<V<L( T*"0D)(" @8F]O<W0Z.G!Y=&AO;CHZ;V)J96-T)B!O8FHI#0I[ M#0II;G0@<G9A;#L-"@T*(" @(&)O;W-T.CIP>71H;VXZ.F]B:F5C="!F=6YC M(#T@9V5T7V9U;F-T:6]N*&-O;G-T7V-A<W0\8VAA<BH^*&9U;F-3='(N8U]S M='(H*2DI.PT*#0H@(" @<G9A;" ](&)O;W-T.CIP>71H;VXZ.F5X=')A8W0\ M:6YT/BAF=6YC*&US9RP@;V)J*2D[#0H-"B @("!R971U<FX@<G9A;#L-"@T* M?2 O*B!C86QL4'ET:&]N("HO#0H-"FEN="!I;FET4'ET:&]N*'-T9#HZ<W1R M:6YG('-C<FEP=$YA;64I#0I[#0H-"B @(" O+R!296=I<W1E<B!T:&4@97AT M96YS:6]N(&UO9'5L90T*(" @(%!Y26UP;W)T7T%P<&5N9$EN:71T86(H(F=R M=6US:"(L(&EN:71G<G5M<V@I.PT*#0H@(" @+R\@26YI=&EA;&EZ92!T:&4@ M4'ET:&]N(&EN=&5R<')E=&5R#0H@(" @4'E?26YI=&EA;&EZ92@I.PT*#0H@ M(" @+R\@26UP;W)T('1H92!M;V1U;&4L('-T;W)I;F<@=&AE('!O:6YT97(@ M:6X@82!H86YD;&4\/@T*(" @(&UY7VUO9'5L92 ](&EM<&]R=%]M;V1U;&4H M8V]N<W1?8V%S=#QC:&%R*CXH<V-R:7!T3F%M92YC7W-T<B@I*2D[#0H-"B @ M("!R971U<FX@4W5C8V5S<SL-"GT-"@T*:6YT(&UA:6XH*0T*>PT*:6YT(')V M86P[#0H-"E1E<W1#("H@=&5S=" ](&YE=R!497-T0R@I.PT*8F]O<W0Z.G-H M87)E9%]P='(\5&5S=$,^('1E<W0Q<'1R*'1E<W0I.PT*#0H@(" @:6YT(')E M='8@/2!I;FET4'ET:&]N*")T97-T7W-C<FEP="(I.PT*(" @(&EF*"!R971V M(#T](%-U8V-E<W,@*0T*(" @('L-"@T*"2\J(%1H:7,@:7,@=VAE<F4@22!G M970@=&AE(')U;BUT:6UE(&5X8V5P=&EO;B!I9B!)(&AA=F4@=&AE('9I<G1U M86P@;65M8F5R(&9U;F-T:6]N(&EN($)A<V4Q+B -"@DJ*B!#;VUM96YT(&]U M="!T:&4@=FER='5A;"!M96UB97(@9G5N8W1I;VXL(&%N9"!E=F5R>6]N92!I M<R!H87!P>2$@#0H)*B\@(" @(" @( T*(" @(" @("!O8FIE8W0@87)G,BAT M97-T,7!T<BD[#0H-"B @(" @(" @:6YT(')E='8@/2!C86QL4'ET:&]N*")M M>51E<W1&=6YC(BP@(E1E<W0@4W1R:6YG(&%R9W5M96YT(&9R;VT@8RLK(BP@ M87)G,BD[#0H-"B @("!]#0H-"B @("!R971U<FX@,#L-"@T*?2 O*B!M86EN %("HO#0H` ` end