Envolviendo matrices en Boost Python

Tengo una serie de estructuras C ++ que estoy tratando de envolver usando boost python. Me he encontrado con dificultades cuando estas estructuras contienen matrices. Estoy tratando de hacer esto con una sobrecarga mínima y, lamentablemente, no puedo hacer ninguna modificación a las estructuras. Así, por ejemplo, digamos que tengo

struct Foo
{
    int vals[3];
};

Me gustaría poder acceder a esto en python de la siguiente manera:

f = Foo()
f.vals[0] = 10
print f.vals[0]

En este momento estoy usando una serie de funciones get / set que funcionan pero que son poco elegantes e inconsistentes con el acceso a otros miembros que no forman parte de la matriz. Aquí está mi solución actual:

int getVals (Foo f, int index) { return f.vals[index]; }
void setVals (Foo& f, int index, int value) { f.vals[index] = value; }

boost::python::class_< Foo > ( "Foo", init<>() )
    .def ( "getVals", &getVals )
    .def ( "setVals", &setVals );

Estoy bien con tener las funciones de obtener / establecer (ya que hay ciertos casos en los que necesito implementar una operación personalizada de obtener o establecer) pero no estoy seguro de cómo incorporar el operador [] para acceder a los elementos de la matriz. En otras clases a las que se puede acceder con el operador [] que he podido usar_obtiene el objeto_ y_setitem_ que han funcionado a la perfección, pero no estoy seguro de cómo haría esto con los miembros de la clase si eso fuera posible.

Respuestas a la pregunta(3)

Su respuesta a la pregunta