Empacotando matrizes no Boost Python

Eu tenho uma série de estruturas em C ++ que estou tentando usar usando python boost. Eu me deparei com dificuldades quando essas estruturas contêm matrizes. Eu estou tentando fazer isso com um mínimo de sobrecarga e, infelizmente, não posso fazer nenhuma modificação nos próprios structs. Por exemplo, digamos que eu tenho

struct Foo
{
    int vals[3];
};

Eu gostaria de poder acessar isso em python da seguinte maneira:

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

No momento, estou usando uma série de funções get / set que funciona, mas é muito deselegante e inconsistente com o acesso aos outros membros que não são da matriz. Aqui está a minha solução atual:

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 );

Eu estou bem em ter as funções get / set (como há certos casos em que preciso implementar uma operação get ou set personalizada), mas não tenho certeza de como incorporar o operador [] para acessar os elementos da matriz. Em outras classes que são acessíveis com o operador [] eu pude usar_getitem_ e_setitem_ que funcionaram perfeitamente, mas não tenho certeza de como faria isso com os alunos se isso fosse possível.

questionAnswers(3)

yourAnswerToTheQuestion