Umbrechen von Arrays in Boost Python

Ich habe eine Reihe von C ++ - Strukturen, die ich mit Boost-Python umbrechen möchte. Ich bin auf Schwierigkeiten gestoßen, wenn diese Strukturen Arrays enthalten. Ich versuche dies mit minimalem Overhead und kann leider keine Änderungen an den Strukturen selbst vornehmen. Sagen wir zum Beispiel, ich habe

struct Foo
{
    int vals[3];
};

Ich möchte in Python wie folgt darauf zugreifen können:

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

Im Moment benutze ich eine Reihe von get / set-Funktionen, die funktionieren, aber sehr unelegant und inkonsistent mit dem Zugriff auf die anderen Nicht-Array-Mitglieder sind. Hier ist meine aktuelle Lösung:

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

Ich bin in Ordnung mit den get / set-Funktionen (da es bestimmte Fälle gibt, in denen ich eine benutzerdefinierte get- oder set-Operation implementieren muss), aber ich bin nicht sicher, wie ich den Operator [] einbinden soll, um auf die Elemente des Arrays zuzugreifen. In anderen Klassen, die selbst mit dem Operator [] zugänglich sind, konnte ich verwenden_getitem_ und_Setitem_ die haben einwandfrei funktioniert, aber ich bin mir nicht sicher, wie ich das mit den klassenmitgliedern machen würde, wenn das überhaupt möglich wäre.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage