Boost :: Python- возможно автоматическое преобразование из dict -> std :: map?

У меня есть класс 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). Мысли?

15
задан MarkD 24 May 2011 в 20:19
поделиться