To: c++-sig@python.org From: David Abrahams <> Date: Tue, 29 Jul 2003 15:44:12 -0400 Subject: [C++-sig] Re: implititly_convertible<>() difficulty Reply-To: c++-sig@python.org
I'm not sure what's going wrong here, but could you try this instead?
#include <boost/python.hpp>
class tuple_type { private: double x; double y; double z; public: tuple_type( double a=0.0, double b=0.0, double c=0.0) : x(a), y(b), z(c) {}
tuple_type( boost::python::tuple sequence) { using boost::python::extract;
int i = extract<int>( sequence.attr("__len__")); switch (i) { case 3: z = extract<double>( sequence[2]); // FALLTHROUGH case 2: y = extract<double>( sequence[1]); x = extract<double>( sequence[0]); break; default: break; } }
tuple_type operator+( const tuple_type& t) const { return tuple_type( x+t.x, y+t.y, z+t.z); } };
BOOST_PYTHON_MODULE( tuple_test) { using namespace boost::python;
class_<tuple_type>( "tuple_type", init<double, double, double>()) .def( self + self) .def( self + other<tuple>()) ; }
-- Dave Abrahams Boost Consulting www.boost-consulting.com
GCC rejected that with this error: tupletest.cpp: In function `void init_module_tuple_test()': tupletest.cpp:42: ambiguous overload for `boost::python::self_ns::self_t& + boost::python::other<boost::python::tuple>' operator c:/msys/local/include/boost/python/operators.hpp:184: candidates are: boost::python::detail::operator_<op_add, L, R> boost::python::self_ns::operator+(const L&, const R&) [with L = boost::python::self_ns::self_t, R = boost::python::other<boost::python::tuple>] c:/msys/local/include/boost/python/object_operators.hpp:60: boost::python::api::object boost::python::api::operator+(const L&, const R&) [with L = boost::python::self_ns::self_t, R = boost::python::other<boost::python::tuple>] Thanks, Jonathan Brandmeyer P.S. Please CC me in all replies on this thread.
"Jonathan Brandmeyer" <jdbrandm@unity.ncsu.edu> writes:
GCC rejected that with this error: tupletest.cpp: In function `void init_module_tuple_test()': tupletest.cpp:42: ambiguous overload for `boost::python::self_ns::self_t& + boost::python::other<boost::python::tuple>' operator c:/msys/local/include/boost/python/operators.hpp:184: candidates are: boost::python::detail::operator_<op_add, L, R> boost::python::self_ns::operator+(const L&, const R&) [with L = boost::python::self_ns::self_t, R = boost::python::other<boost::python::tuple>] c:/msys/local/include/boost/python/object_operators.hpp:60: boost::python::api::object boost::python::api::operator+(const L&, const R&)
[with L = boost::python::self_ns::self_t, R = boost::python::other<boost::python::tuple>]
For recent GCCs, that should now be fixed in CVS. The enclosed patch should also address the problem -- Dave Abrahams Boost Consulting www.boost-consulting.com
participants (2)
-
David Abrahams -
Jonathan Brandmeyer