Недавно я наткнулся на ограничение SWIG, связанное с размером C ++ std :: string. < /p>
У меня есть код C ++, возвращающий пару. Я заметил, что когда размер строки в паре меньше, что 2*1024*1024*1024-64 (2 ГБ) пара правильно возвращает, а строка сопоставлена с нативной строкой Python. Однако, если строка больше 2 ГБ, то в Python строка больше не отображается на собственную строку Python. Например, используя приведенный ниже код и сопоставление через SWIG на Python, вы можете воспроизвести мою ошибку. Python 2.7.12 < /p>
/////////// bridge.h
#include
#include
#include
#include
#include
using namespace std;
pair large_string(long sz);
long size_pstring(pair& p);
void print_pstring(pair& p);
string save_pstring(pair& p);
//////////bridge.cc
#include "bridge.h"
pair large_string(long sz){
pair pis;
pis.first=20;
pis.second=string(sz,'A');
return pis;
}
long size_pstring(pair& p){
return p.second.size();
}
void print_pstring(pair& p){
cout>> print l
2147483648
>>> fname = graphdb.save_pstring(s)
< /code>
Сохранение строки в файл является правильной, и затем я могу правильно загрузить файл на строку Python. < /p>
Итак, мой вопрос: кто-нибудь знает, какой вариант конфигурации SWIG я должен изменить, чтобы допустить, чтобы большие строки были должным образом отображены с нативным питоном?>
Подробнее здесь: https://stackoverflow.com/questions/500 ... using-swig