У меня есть класс 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
, поэтому дублирование нежелательно.