boost :: python строково-конвертируемые свойства - PullRequest
5 голосов
/ 26 апреля 2010

У меня есть класс C ++, который имеет следующие методы:

class Bar {
...
    const Foo& getFoo() const;
    void setFoo(const Foo&);
};

, где класс Foo может быть преобразован в std::string (он имеет неявный конструктор из std::string и оператор приведения std::string).

Я определяю класс-оболочку Boost.Python, который, помимо прочего, определяет свойство на основе двух предыдущих функций:

class_<Bar>("Bar")
    ...
    .add_property(
        "foo",
        make_function(
            &Bar::getFoo,
            return_value_policy<return_by_value>()),
        &Bar::setFoo)
    ...

Я также отмечаю класс как конвертируемый в / из std::string.

implicitly_convertible<std::string, Foo>();
implicitly_convertible<Foo, std::string>();

Но во время выполнения я все еще получаю ошибку преобразования, пытаясь получить доступ к этому свойству:

TypeError: No to_python (by-value) converter found for C++ type: Foo

Как добиться конверсии без лишних шаблонов функций обертки? (У меня уже есть все функции преобразования в классе Foo, поэтому дублирование нежелательно.

1 Ответ

2 голосов
/ 05 мая 2010

Я закончил тем, что бросил и реализовал нечто похожее на пример преобразования пользовательских классов строк в FAQ по Boost.Python , который немного многословен, но работает как рекламируется.

...