我试图公开一个将 const wchar_t* 作为 python 参数的 c++ 函数。在我看来,const wchar_t* 不是一种受支持的输入类型,它会自动公开为 python 字符串,然后像普通的 const char* 一样自动转换。
是否可以添加某种类型的输入类型转换器来自动实现这一点?我知道我可以添加蹦床函数并自己进行 unicode 转换,但让它自动运行会更方便。
我的 boost 版本是 1.52,我正在 64 位 Windows 上使用 python 2.7。
这是显示问题的简单 c++ 序列的示例代码:
#include <boost/python.hpp>
#include <iostream>
using namespace boost::python;
void testWcharParam(const wchar_t* str) {
std::wcout << str << std::endl;
}
void testCharParam(const char* str) {
std::wcout << str << std::endl;
}
BOOST_PYTHON_MODULE(test)
{
def("testWcharParam", testWcharParam);
def("testCharParam", testCharParam);
}
在 python 中导入和运行它时,我得到以下结果:
>>> import test
>>> test.testCharParam('test')
test
>>> test.testWcharParam('test')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
test.testWcharParam(str)
did not match C++ signature:
testWcharParam(wchar_t const * __ptr64)
>>>
出于某种原因,此处的字符串方法http://www.boost.org/doc/libs/1_52_0/libs/python/doc/v2/faq.html#custom_string不适用于原始 wchar_t*。
编辑:添加了缺少的包含和平台信息。
编辑:在 boost 文档中添加了关于示例的注释