[C++-sig] Using boost::tuple from python
Jim Bosch
talljimbo at gmail.com
Sat Jun 25 22:06:34 CEST 2011
On 06/25/2011 11:40 AM, Jay Riley wrote:
> I figured I might be able to expose the tuple by some variation on the
> below:
>
> class_<ActionTargetTuple>("ActionTargetTuple")
> .def("get", &ActionTargetTuple::get<int>,
> return_value_policy<reference_existing_object>())
> ;
>
> then use get from python, but if it is doable in this way, I'm not sure
> what the set up needs to be. Does anyone know how to do this/could
> suggest an alternative?
tuple::get is templated on the number you want - it doesn't take that as
an argument. I don't think there's a way to do this without writing
your own "get" with a switch statement or a lot of template
metaprogramming (I don't think get<int> will compile):
object get(ActionTargetTuple & self, int n) {
switch (n) {
case 0:
return object(self.get<0>());
case 1:
return object(self.get<1>());
default:
PyErr_SetString(PyExc_IndexError, "Index out of range");
throw_error_already_set();
}
}
class<ActionTargetTuple>("ActionTargetTuple")
.def("get", &get);
I think that's roughly what you need.
Jim
More information about the Cplusplus-sig
mailing list