我正在尝试做一些应该非常简单的事情,但是我没有太多运气从现有文档中弄清楚如何做。
对于 python 2 项目,我试图将列表 gettext-translated 字符串作为 unicode 实例返回给 python。gettext() 的返回值是一个 UTF-8 编码的 char*,使用 PyUnicode_FromString 将其转换为 python unicode 实例应该非常简单。我觉得这很简单,但我似乎无法弄清楚如何做。
根据 Ignacio Vazquez-Abrams 和 Thomas KI 的评论,这确实适用于单个字符串;对于这种情况,您可以绕过所有 boost.python 基础设施。这是一个例子:
PyObject* PyMyFunc() {
const char* txt = BaseClass::MyFunc();
return PyUnicode_FromString(txt);
}
它通过通常的 def 语句公开:
class_<MyCclass>("MyClass")
.def("MyFunc", &MyClass::PyMyFunc);
不幸的是,当您想要返回 unicode 实例列表时,这不起作用。这是我天真的实现:
boost::python::list PyMyFunc() {
std::vector<std::string> raw_strings = BaseClass::MyFunc();
std::vector<std::string>::const_iterator i;
boost::python::list result;
for (i=raw_strings.begin(); i!=raw_strings.end(); i++)
result.append(PyUnicode_FromString(i->c_str()));
return result;
}
但这不会编译: boost::python::list 似乎确实可以处理 PyObject 值。