У меня есть класс C ++ с функцией-членом, которая может принимать от малого до большого количества параметров. Назовем эти параметры af. Все параметры имеют значения по умолчанию. Как часть проекта python, над которым я работаю, я хочу предоставить этот класс python. В настоящее время функция-член выглядит примерно так:
class myClass {
public:
// Constructors - set a-f to default values.
void SetParameters(std::map<std::string, double> &);
private:
double a, b, c, d, e, f;
}
void myClass::SetParameters(std::map<std::string, double> const& params) {
// Code to iterate over the map, and set any found key/value pairs to their
// corresponding variable. i.e.- "a" --> 2.0, would set myClass::a to 2.0
}
В идеале, в Python я хотел бы выполнить это с помощью dict:
>>> A = myModule.myClass();
>>> A.SetParameters({'a': 2.2, 'd': 4.3, b: '9.3'})
Таким образом, пользователь мог вводить значения в любом порядке и вводить любое количество их нужно преодолеть. Есть мысли о том, как это можно сделать в boost :: python? Мне кажется, что я могу сделать это, изменив ввод карты на объект boost :: python и используя функции извлечения. Однако для этого мне потребовалось бы изменить интерфейс моей библиотеки (я бы предпочел сохранить интерфейс std :: map и использовать некоторые методы промежуточного / автоматического преобразования для версии на Python). Мысли?