
Does anyone know why the following sample fails (it was adapted from the boost overloading example) and how to do this correctly. Thanks in advance. #include <boost/python/module.hpp> #include <boost/python/def.hpp> #include <boost/python/args.hpp> #include <boost/python/tuple.hpp> #include <boost/python/class.hpp> #include <boost/python/overloads.hpp> #include <boost/python/return_internal_reference.hpp> using namespace boost::python; struct X { int f(int x, double y = 4.25, char const* z = "wow") { return x; } int f(int x, bool b = true) { return x; } }; BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_member_overloads, X::f, 1, 3) BOOST_PYTHON_MODULE(args_ext) { class_<X>("X", "This is X's docstring") .def("f1", &X::f, f_member_overloads(args("x", "y", "z"), "f's docstring" )[return_internal_reference<>()] ) ; } g++ -fpic -shared -o test.so test.cpp -lpython2.4 -lboost_python -I/usr/include/python2.4 test.cpp: In function ‘void init_module_args_ext()’: test.cpp:31: error: no matching function for call to ‘boost::python::class_<X, boost::python::detail::not_specified, boost::python::detail::not_specified, boost::python::detail::not_specified>::def(const char [3], <unresolved overloaded function type>, boost::python::detail::overloads_proxy<boost::python::return_internal_reference<1ul, boost::python::default_call_policies>, f_member_overloads>)’

I realize that it's impossible to know which function to call from f(5) in the code I posted, but I get an error even if remove the default value for the boolean in the second call, in which case it's pretty clear which function I am calling. Any thoughts? Thanks. On Fri, Apr 17, 2009 at 5:25 PM, A B <python6009@gmail.com> wrote:
Does anyone know why the following sample fails (it was adapted from the boost overloading example) and how to do this correctly. Thanks in advance.
#include <boost/python/module.hpp> #include <boost/python/def.hpp> #include <boost/python/args.hpp> #include <boost/python/tuple.hpp> #include <boost/python/class.hpp> #include <boost/python/overloads.hpp> #include <boost/python/return_internal_reference.hpp>
using namespace boost::python;
struct X
{
int f(int x, double y = 4.25, char const* z = "wow")
{
return x;
}
int f(int x, bool b = true) {
return x;
}
};
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_member_overloads, X::f, 1, 3)
BOOST_PYTHON_MODULE(args_ext)
{
class_<X>("X", "This is X's docstring")
.def("f1", &X::f,
f_member_overloads(args("x", "y", "z"), "f's docstring"
)[return_internal_reference<>()]
)
;
}
g++ -fpic -shared -o test.so test.cpp -lpython2.4 -lboost_python -I/usr/include/python2.4
test.cpp: In function ‘void init_module_args_ext()’:
test.cpp:31: error: no matching function for call to ‘boost::python::class_<X, boost::python::detail::not_specified, boost::python::detail::not_specified, boost::python::detail::not_specified>::def(const char [3], <unresolved overloaded function type>, boost::python::detail::overloads_proxy<boost::python::return_internal_reference<1ul, boost::python::default_call_policies>, f_member_overloads>)’

AMDG A B wrote:
On Fri, Apr 17, 2009 at 5:25 PM, A B <python6009@gmail.com> wrote:
struct X { int f(int x, double y = 4.25, char const* z = "wow"); int f(int x, bool b = true); };
<snip>
class_<X>("X", "This is X's docstring")
.def("f1", &X::f,
The compiler can't figure out which overload of X::f you mean. It must be resolved here and there is not enough information.
<snip>
g++ -fpic -shared -o test.so test.cpp -lpython2.4 -lboost_python -I/usr/include/python2.4
test.cpp: In function ‘void init_module_args_ext()’:
test.cpp:31: error: no matching function for call to ‘boost::python::class_<X>::def(const char [3], <unresolved overloaded function type>, etc.)’
In Christ, Steven Watanabe
participants (2)
-
A B
-
Steven Watanabe