Я предполагаю, что функция, которую вы хотите изменить, это std::vector<std::string>
'__getitem__
подпрограмма в Python.
Самый простой и безопасный способ изменить или перехватить результат возвращаемого значенияна самом деле это делается на стороне Python, используя %feature("pythonappend")
, например:
%module test
%{
#include "test.h"
%}
%include "pyabc.i"
%include "std_vector.i"
%include "std_string.i"
%feature("pythonappend") std::vector<std::string>::__getitem__ %{
# do something
print val
%}
%include "test.h"
%template (StringVector) std::vector<std::string>;
Причина, по которой это самый простой способ изменения результата, заключается в том, что следующий самый простой способ изменения результата требует изменениякарта типов для возвращаемого типа - в данном случае std::string
.Чтобы сделать это, вы в конечном итоге измените существующую карту типов std::string
, которая выглядит несколько беспорядочно.
В качестве альтернативы вы можете использовать директиву %exception
, чтобы поместить некоторый код C ++ после$action
, но если это не для проверки правильности возвращенного результата, он выглядит довольно хакерским.