[C++-sig] Re: a pointer question
Nikolay Mladenov
nickm at sitius.com
Fri Jun 27 16:13:23 CEST 2003
You have to write
class_<A> ("A",init<int>())
.add_property("d",&A::getd)
.add_property("pb",make_getter(&A::pb,
return_internal_reference<1>()));
check the docs for make_getter.
Jaleco wrote:
>
> Dear all
>
> I am trying use boost.python to export freetype library to python.
> But I encounter pointer problem.boost don't know pointer.
> How do I export class pointer to python ?
>
> / Includes
> ====================================================================
> #include ?boost/python.hpp?
>
> class B
> {
> public :
> int d ;
>
> };
> class A
> {
> public :
> A(int d) { pb = new(B);pb-?d = d ;} ;
> int getd(void) { return pb-?d;} ;
> B *pb ;
> };
>
> // Using
> =======================================================================
> using namespace boost::python;
>
> // Module
> ======================================================================
> BOOST_PYTHON_MODULE(ft2)
> {
> class_?A? ("A",init?int?())
> .add_property("d",?A::getd)
> .def_readonly("pb",?A::pb);
> class_?B? ("B")
> .def_readwrite("d",?B::d) ;
>
> }
>
> C:\source\boost_1_30_0\libs\python\ft2?python
> Python 2.2.3 (#42, May 30 2003, 18:12:08) [MSC 32 bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
> ??? import ft2
> ??? a = ft2.A(1)
> ??? pb = a.pb
> Traceback (most recent call last):
> File "?stdin?", line 1, in ?
> TypeError: No to_python (by-value) converter found for C++ type: class B *
> ???
>
> another question is , I try to add
> BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(B) ; to
> my source source code, This problem is gone.
> But the answer is wrong .................
>
> // Includes
> ====================================================================
> #include ?boost/python.hpp?
>
> class B
> {
> public :
> int d ;
>
> };
> class A
> {
> public :
> A(int d) { pb = new(B);pb-?d = d ;} ;
> int getd(void) { return pb-?d;} ;
> B *pb ;
> };
> BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(B) ;
> // Using
> =======================================================================
> using namespace boost::python;
>
> // Module
> ======================================================================
> BOOST_PYTHON_MODULE(ft2)
> {
> class_?A? ("A",init?int?())
> .add_property("d",?A::getd)
> .def_readonly("pb",?A::pb);
> class_?B? ("B")
> .def_readwrite("d",?B::d) ;
>
> }
>
> Python 2.2.3 (#42, May 30 2003, 18:12:08) [MSC 32 bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
> ??? import ft2
> ??? a = ft2.A(1)
> ??? pb=a.pb
> ??? pb
> ?ft2.B object at 0x009082C8?
> ??? pb.d
> 10445536
> ??? a.d
> 1
> ???
More information about the Cplusplus-sig
mailing list