[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