У меня есть класс С++ с функцией-членом, которая может принимать небольшое и большое количество параметров. Давайте назовем эти параметры, a-f. Все параметры имеют значения по умолчанию. В рамках проекта 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 и используя функции extract. Тем не менее, это потребует от меня изменить интерфейс моей библиотеки (я бы предпочел сохранить интерфейс std:: map и использовать некоторый метод промежуточного/автоматического преобразования для версии python). Мысли?