The*_*eJJ 7 c c++ python api python-3.x
我正在尝试在我们的C++项目中嵌入Python 3.3.Python 3.3似乎已经引入了UTF-8作为首选存储,PEP 393:"规范选择UTF-8作为向C代码公开字符串的推荐方式."
我写了这个初始化代码,看似简单直观:
#include <Python.h>
#include "log.h"
void python_init(const char *program_name) {
if (not Py_IsInitialized()) {
Py_SetProgramName(program_name);
Py_Initialize();
const char *py_version = Py_GetVersion();
log::msg("initialized python %s", py_version);
}
}
Run Code Online (Sandbox Code Playgroud)
但编译失败:
/home/jj/devel/openage/src/engine/python.cpp:13:3: error: no matching function for call to 'Py_SetProgramName'
Py_SetProgramName(program_name);
^~~~~~~~~~~~~~~~~
/usr/include/python3.3/pythonrun.h:25:18: note: candidate function not viable: no known conversion from 'const char *' to 'wchar_t *' for 1st argument
PyAPI_FUNC(void) Py_SetProgramName(wchar_t *);
^
Run Code Online (Sandbox Code Playgroud)
所以,是的,显然我需要一个wchar_t *,但我没有看到任何理由为什么char *不在这里做这个工作.
这里的最佳做法是什么?转换char *到wchar *和处理区域设置(mbstowcs),这也将带来不必要的动态内存allocs?
此外,如果Python决定wchar完全采用,为什么会按照我的预期Py_GetVersion()返回char *?
我发现Python <3.3的类似问题,但我希望Python 3.3不同(PEP 393?).
代码必须具有跨平台能力.
=>将C strings(char *)传递给Python 3.3 的快速有效的解决方案是什么?
| 归档时间: |
|
| 查看次数: |
1244 次 |
| 最近记录: |