Я попытался выяснить, как поддерживать const wchar_t * в качестве возвращаемого типа для функции, открытой в boost python. Моя версия boost - 1.52, и я работаю с python 2.7, если это имеет значение.Преобразование const wchar_t * в строку python в boost python
Как-то я не могу заставить его принять мою функцию преобразования. Я видел фрагменты решений этой проблемы в Интернете, но ничего на самом деле не работает или не говорит, как это сделать правильно.
Вот мой тривиальный нерабочий пример:
#include <string>
#include <boost/python.hpp>
using namespace boost::python;
struct wchar_t_to_python_str
{
static PyObject* convert(const wchar_t*)
{
std::string s = "I'm more interested in the function signature than how to do wide char to non-wide char conversion";
return boost::python::incref(boost::python::object(s).ptr());
}
};
void init_module()
{
to_python_converter<const wchar_t*, wchar_t_to_python_str>();
}
const wchar_t* testWchar() {
return L"Hello World";
}
const char* testChar() {
return "Hello World";
}
BOOST_PYTHON_MODULE(test)
{
// This works nicely, const char* is supported
def("testChar", testChar);
// This doesn't work, fails with this error
// 'awBoost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<T>'
// def("testWchar", testWchar);
// Throwing in a return value policy fires a compile time assert make_instance_impl
// BOOST_MPL_ASSERT((mpl::or_<is_class<T>, is_union<T> >));
// It seems like it gets confused by wchar_t not being a class, but it's hard to know
def("testWchar", testWchar, return_value_policy<reference_existing_object>());
}
Спасибо. Мне удалось запустить первую версию (с return_value_policy), которая, по сути, мне нужна, чтобы двигаться дальше. Я получил неприятную ошибку компиляции boost для второго подхода в visual studio 2012, который мне не удалось разобрать. – Laserallan
Ошибка в случае, если кто-то хорош при boost :: mpl debugging: ошибка C3083: 'function_types': символ слева от '::' должен быть типом для строки typedef typename boost :: mpl :: push_front < typename boost :: function_types :: parameter_types :: type, ReturnType > :: type signature_type –
Laserallan