Хорошо, я уже задал два вопроса о своей проблеме и, несмотря на то, что ответы были действительно полезными, я не могу найти оптимальное решение для своей проблемы. Позвольте мне объяснить мою главную задачу/проблему сейчас.Реализация поддержки std :: vector без std_vector.i
Из-за некоторых ограничений я не могу использовать std_vector.i в моем интерфейсе swig, но мне нужно использовать объект C++ (вектор векторов строки) vector<vector<string>>
в Python. Я реализовал решение, в котором я конвертирую весь код vector<vector<string> >
в «Список списков» на Python, где я делаю следующие преобразования: каждая строка C++ для строки Python с использованием PyString_FromString()
каждый vector<string>
в списки Python l1, l2, l3, l4 ... и, наконец, vector<vector<string> >
в список Python, содержащий элементы l1, l2, l3, l4 .. как элементы.
Хотя это решение отлично работает, и я могу получить доступ к строковым значениям в Python, но это решение не выглядит оптимальным для меня.
Я бы предпочел класс (без использования std_vector.i), чей объект я могу передать как аргумент функции, который будет заполнен значениями, и после возврата из функции я должен иметь доступ к значениям, используя ob[0][0]
и т. Д. В этом я должен будет сделать только одно преобразование (строка C++ в строку python), для каждого доступного значения, в __getitem__
. Но я не знаю, как определить класс, представляющий vector<vector<string> >
в Python, без использования %template
.
его вектор вектор>. Я написал это в проблеме, но из-за какой-то неизвестной ошибки он показывает vector> вместо vector >. –
Saurabh
Здесь я не понимаю вопроса - вы хотите обернуть «std :: vector» без использования уже предоставленного интерфейса. Вы также говорите, что вы уже написали код для 'vector>' в список списка. Можете ли вы объяснить, с минимальным * примером, что вы хотите обернуть, и почему ни один из них не был бы разумным? –
Flexo
хорошо, я не использую уже поставляемый интерфейс i.e std_vector.i, потому что он недоступен в моей организации (мы используем собственные инструменты сборки и библиотеки, и поэтому мы не можем использовать std_vector.i). в настоящее время я делаю что-то вроде этого: % apply vector <вектор> * OUTPUT {vector > * result}; Тип карты (in, numinputs = 0) vector > * OUTPUT (вектор <вектор > t) { $ 1 = t; } typemap (argout, fragment = "t_output_helper") vector > * OUTPUT { $ result = t_output_helper ($ result, my_function_to_convert_vectorToList ($ 1)); } –
Saurabh