ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> cpp-sig
cpp-sig
Re: [C++-sig] Re : How to wrap this overloaded member function whose return type is reference ?
by David Abrahams other posts by this author
Feb 22 2003 5:42PM messages near this date
[C++-sig] Re : How to wrap this overloaded member function whose return type is reference ? | Re: [C++-sig] Re : How to wrap this overloaded member function whose return type is reference ?
"horace\(seednet\)" <horace_hdsl@[...].tw>  writes:

>  Dave Abrahams wrote :
> 
> > Can you post the error message(s) you get?  That would be a nice start.
> 
>  Ok, Dave, If you want to see those error messages, here you go. Last
>  time I thought it wasn't too polite to dump those lengthy error
>  messages here.

The ones you've got below aren't too lengthy ;-)

>  for this line of code :
> 
>    .def_readonly("origin",&point3d::origin)
> 
>  I got 
> 
>  D:\test\point3d.cpp(6) : error C2784: 'class
>  boost::python::class_<class point3d,struct
>  boost::python::detail::not_specified,struct
>  boost::python::detail::not_specified,struct
>  boost::python::detail::not_specified> &__thiscall
>  boost::python::class_<class point3d,struct
>  boost::python::detail::not_specified,struct
>  boost::python::detail::not_specified,struct
>  boost::python::detail::not_specified>::def_readonly(const char *,
>  point3d::*)' : could not deduce template argument for ' point3d::*'
>  from 'const class point3d *'

OK, the problem here is that point3d::origin is not a regular data
member.  A static data member acts just like an ordinary variable, so
the type of &point3d::origin is not

    point3d const point3d::*

but

    point3d const*

I don't have a way of enabling you to restrict modification, but one
easy way to deal with this is:

    object class_point3d
      = class_<point3d> ("point3d")
         .def(init<> ())    // compiles ok
         .def(init<const point3d&> () // compiles ok
         .def(init<double,double,double> (args("x", "y", "z")))
         ...
         ;

    class_point3d.attr("origin") = point3d::origin;


>  for this line of code  :
> 
>    .def("set",(point3d& (point3d::*)(double, double, double)) point3d::set,args("x", "y", "
z")) 
> 
>  I got 
> 
>  d:\boost_1_29_0\boost/python/detail/returning.hpp(175) : error
>  C2079: 'cr' uses undefined struct
>  'specify_a_result_policy_to_wrap_functions_returning<class point3d &>'
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

That should be a big clue.  Have you read about CallPolicies?

http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/doc/tutori
al/doc/call_policies.html

http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/doc/v2/Cal
lPolicies.html#CallPolicies-concept

http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/doc/v2/ref
erence.html#models_of_call_policies

http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/doc/v2/ref
erence.html#result_converter_generators

>  I think my problem in using Boost.Python is that I don't know what I'm doing.  

Possibly; If so I hope that my reply will help to correct that.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com


_______________________________________________
C++-sig mailing list
C++-sig@[...].org
http://mail.python.org/mailman/listinfo/c++-sig
Thread:
horace(seednet)
David Abrahams
Nicodemus
David Abrahams

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved