У меня есть ряд структур С++, которые я пытаюсь обернуть, используя boost python. Я столкнулся с трудностями, когда эти структуры содержат массивы. Я пытаюсь сделать это с минимальными издержками и, к сожалению, я не могу вносить какие-либо изменения в сами структуры. Так например, скажем, у меня
struct Foo
{
int vals[3];
};
Я хотел бы иметь доступ к этому в python следующим образом:
f = Foo()
f.vals[0] = 10
print f.vals[0]
Сейчас я использую ряд функций get/set, который работает, но очень неэлегантен и несовместим с доступом к другим членам, не относящимся к массиву. Вот мое текущее решение:
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 );
Мне хорошо, что у меня есть функции get/set (так как есть определенные случаи, когда мне нужно реализовать пользовательскую операцию get или set), но я не уверен, как включить оператор [] для доступа к элементам массива, В других классах, которые сами доступны с помощью оператора [], я смог использовать _getitem _ и _setitem _, которые отлично работали, но я не уверен, как это сделать это с членами класса, если это возможно даже.