【发布时间】:2019-08-27 11:40:51
【问题描述】:
我有一个 C++ 遗留代码(编辑起来会很痛苦),出于速度原因,我需要在 Python 2 中使用它。
我有两节课。一个负责从内存中加载大量数据,形式为std::string,并将其转换为内部表示MiddleClass。第二个是将其从内部表示 MiddleClass 转换回 std::string。
class Load {
Load(const std::string & data) { ... };
MiddleClass load() { ... };
};
class Save {
Save(std::string & data) { .... };
void save(const MiddleClass & middleclass) { ... };
};
我的目标是,像这样在 Python 2 中使用这个设置:
import datahandler # my lib
import requests
request = request.get("url-to-data")
loader = datahandler.Load(request.content) # my C++ class Load
internal_representation = loader.load()
.
.
.
result_variable = str() # or None or something not important
saver = datahandler.Save(result_variable) # my C++ class Save
saver.save(internal_representation)
我怎样才能做到这一点?
我从一开始就遇到了麻烦。
简单变体:
BOOST_PYTHON_MODULE(datahandler)
{
class_<MiddleClass>("MiddleClass");\
// some .defs - not important
class <Load>("Load", init<const std::string &>())
.def("load". &Load::load);
class <Save>("Save", init<std::string &>())
.def("save". &Save::save);
}
会编译,不用担心,但是加载的数据会以某种方式被破坏,这让我想到,我做的非常错误。
我还发现了this 有点离题的 SO 问题,它告诉我,我不能拥有std::string &,因为 Python 字符串是不可变的。
所以结论:我现在不知道该怎么做:(这里有人可以帮助我吗?谢谢。
【问题讨论】:
标签: python c++ python-2.7 boost-python