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
|