私は非常に単純であるべきことをしようとしていますが、既存のドキュメントからその方法を理解するのはあまりうまくいきません。
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 値を処理しているようです。