У меня есть унаследованный код на 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);
}
Скомпилируется, не беспокойтесь,но загруженные данные каким-то образом искажены, что заставляет меня думать, что я делаю это ужасно неправильно.
Также я нашел этот битный оффтопный ТАК вопрос, который сказал мне, что яне может иметь std::string &
, потому что строки Python неизменны.
Итак, вывод: я понятия не имею, что мне теперь делать :( Кто-нибудь может мне здесь помочь? Спасибо.