[C++-sig] Re: long long unsigned issue...
Milind Patil
milind_patil at hotmail.com
Fri May 23 03:59:27 CEST 2003
Thanks Dave. The to_python conversion error has gone away.
I am running accross a different issue now. My assumption was that once
I had a way to convert python long to Y via long_, I should also be able to handle
statements like
x = hello.Y(2, 4294967295)
possibly after adding
implicitly_convertible<int, Y_Wrapper>();
But this does not work. Is my assumption wrong? Any pointers as to
where to look for a solution?
Thanks,
Milind
PS:
Code reproduced here for reference:
class Y {
public:
Y() : y(0L) { }
Y(int y) : y(y) { }
Y(long long unsigned int y) : y(y) { }
Y(int s, const Y & y) : y(y << s) { }
Y(Y const& rhs) : y(rhs.y) { }
virtual ~Y() { }
operator int() const { return y; }
void operator=(Y const& y) {
this->y = y.y;
}
long long unsigned int y;
};
The Wrapped boost part (hello.cpp):
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include <boost/python.hpp>
#include <hello.h>
using namespace boost::python;
namespace {
struct Y_Wrapper: Y {
Y_Wrapper (PyObject* self_) : Y(), self(self_) {}
Y_Wrapper (PyObject* self_, int y) : Y(y), self(self_) {}
Y_Wrapper (PyObject* self_, long long unsigned int y) : Y(y),
self(self_) {}
Y_Wrapper (PyObject* self_, int s, const Y& y) : Y(s,y), self(self_) {}
Y_Wrapper (PyObject* self_, const Y& y) : Y(y), self(self_) {}
Y_Wrapper (PyObject* self_, boost::python::long_ y) : Y(0), self(self_)
{printf("hello long_");}
PyObject* self;
};
}
BOOST_PYTHON_MODULE(hello)
{
class_< Y, Y_Wrapper >("Y", init< >())
.def(init< const Y & >())
.def(init< int, const Y & >())
.def(init< int >())
.def(init< long long unsigned int >())
.def(init< long_ >())
.def_readwrite("y", &Y::y)
.def("__int__", &Y::operator int)
;
implicitly_convertible<int, Y>();
implicitly_convertible<long_, Y_Wrapper>();
}
The python script:
import hello
x = hello.Y(4294967295)
print x.y
z = hello.Y(2, 4294967295)
print z.y
More information about the Cplusplus-sig
mailing list