[C++-sig] Virtual Methods + default arguments
by Bruno da Silva de Oliveira other posts by this author
Feb 26 2003 2:57AM messages near this date
Re: [C++-sig] Boost.Python compiles & links on Darwin
|
Re: [C++-sig] Virtual Methods + default arguments
Hi!
Is it possible to indicate default arguments for virtual methods, using
the BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS macro?
I have this code:
struct X
{
virtual void f(int x = 10, char c = 'a')
{
std::cout << x << ", " << c << std::endl;
}
};
void call_f(X& x)
{
x.f();
}
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_overloads, f, 0, 2)
struct XWrap: X
{
XWrap(PyObject* self_): self(self_) {}
XWrap(PyObject* self_, const X&): self(self_) {}
PyObject* self;
void f(int x = 10, char c = 'a')
{
call_method<void> (self, "f", x, c);
}
void default_f(int x = 10, char c = 'a')
{
X::f(x, c);
}
};
BOOST_PYTHON_MODULE(test)
{
def("call_f", &call_f);
class_< X, XWrap > ("X")
.def("f", &X::f, &XWrap::default_f, f_overloads())
;
}
But this does not compile. Here's the first line of the output of the
compiler:
D:\Programming\Libraries\boost-cvs\boost\boost/python/detail/caller.hpp(53):
error: class "f_overloads" has no member "result_converter"
So I tried to change the class_ definition to this:
class_< X, XWrap > ("X")
.def("f", &X::f, &XWrap::default_f)
.def("f", &X::f, f_overloads())
;
It compiles fine, but in python:
> >> from test import *
> >> x = X()
> >> x.f(10, 'c')
Traceback (most recent call last):
File "<stdin> ", line 1, in ?
RuntimeError: unidentifiable C++ exception
> >>
I also tried to change the second .def to:
.def("f", &XWrap::f, f_overloads())
and:
.def("f", &XWrap::default_f, f_overloads())
But with the same results.
So, is it possible to have virtual methods with default arguments? If
so, how? Any pointer would be greatly appreciated.
Thanks in advance,
Nicodemus.
_______________________________________________
C++-sig mailing list
C++-sig@[...].org
http://mail.python.org/mailman/listinfo/c++-sig
Thread:
Bruno da Silva de Oliveira
David Abrahams
Nicodemus
|