所以,我想創建一個to_python轉換器,它將允許我從一個公開的函數返回一個boost :: optional,並將它視爲T如果設置了可選項如果沒有則爲無。根據我在C++Sig上發現的帖子,我編寫了下面的代碼。Boost Python沒有to_python轉換器找到std :: string
template<typename T>
struct optional_ : private boost::noncopyable {
struct conversion {
static PyObject* convert(boost::optional<T> const& value) {
if (value) {
return boost::python::to_python_value<T>()(*value);
}
Py_INCREF(Py_None);
return Py_None;
}
};
explicit optional_() {
boost::python::to_python_converter<boost::optional<T>, conversion>();
}
};
據我所知道的,它適用於轉換自選,但蟒蛇拋出以下異常「類型錯誤:沒有to_python(按值)發現C++的類型轉換器:的std :: string」。我知道C++能夠將字符串轉換爲python,因爲大多數我公開的函數都會返回字符串。爲什麼boost :: python :: to_python_value不能識別它,以及如何利用它擁有的任何轉換器?
修正通過改變以下(基於this article):
template<typename T>
struct optional_ : private boost::noncopyable {
struct conversion {
static PyObject* convert(boost::optional<T> const& value) {
using namespace boost::python;
return incref((value ? object(*value) : object()).ptr());
}
};
explicit optional_() {
boost::python::to_python_converter<boost::optional<T>, conversion>();
}
};
我們只是做其他的版本,所以它是清潔,效果更好。
請將您的解決方案的答案和接受它。 – 2011-06-29 00:22:30