[C++-sig] () and [] operators
Bjorn Pettersen
BPettersen at NAREX.com
Wed Nov 13 00:33:44 CET 2002
> From: Kerim Borchaev [mailto:warkid at hotbox.ru]
>
> I wasn't able to find an "intuitive"(like for other
> operators) way to expose () and []
> operators. How am I supposed to do it?
The () operator should be pretty straight forward binding to __call__,
however operator[] must raise a Python IndexError when called with an
out of range argument (e.g. the old for loop protocol required this and
it is still used for objects that don't define __iter__). Here's example
code from wrapping our internal string class, NString:
namespace {
char NString_get_item(NString& self, int index) {
if (index >= self.size()) {
PyErr_SetObject(PyExc_IndexError,
PyInt_FromLong(index));
boost::python::throw_error_already_set();
}
return self[index];
}
}
void wrap_NString() {
class_<NString, bases<NObject> >("NString", init<char*>())
...
.def("__getitem__", &NString_get_item)
;
}
(basically, just bind __getitem__ to a standalone function that does the
index checking...)
hth,
-- bjorn
More information about the Cplusplus-sig
mailing list