Строка определения так важна ...... но она так ... незаметна в то же время. Интересно, как ты это нашел.

лкиваюсь с аналогичной проблемойWrap std :: vector из std :: vectors, C ++ SWIG Python - но это не просто синтаксический анализ C ++. У меня есть следующее в моем коде C ++

namespace ns {
    typedef unsigned long long uint64_t;
    typedef std::vector<uint64_t> Vector;
    typedef std::vector<Vector> VectorOfVectors;

    class MyClass {
        /// ...

        /// Returns a reference to the internal vector allocated in C++ land
        const VectorOfVectors &GetVectors() const;
    };
}

И в обертке SWIG

%module myswig    
// ...
%template(Uint64V) std::vector<ns::uint64_t>;
%template(VUint64V) std::vector<std::vector<ns::uint64_t> >;

Таким образом, упаковка работает нормально, включая класс, и я могу получить вектор векторов класса ОК:

import myswig
m = myswig.MyClass()
v = m.GetVectors()
print v

Что дает мне:

<myswig.VUint64V; proxy of <Swig Object of type 'std::vector< std::vector< ns::uint64_t,std::allocator< ns::uint64_t > > > *' at 0x994a050> >

Но если я получаю доступ к элементу в векторе, я не получаю прокси, который является myswig.Uint64V - и это моя проблема.

x = v[0]
print x

Я надеюсь получить это:

<myswig.Uint64V; proxy of <Swig Object of type 'std::vector< ns::uint64_t, std::allocator< ns::uint64_t > > *' at 0x994a080> >

Вместо этого я получаю:

(<Swig Object of type 'ns::uint64_t *' at 0x994a080>, <Swig Object of type 'ns::uint64_t *' at 0x994a098>) 

То есть индекс в векторе векторов дает мне кортеж из 2-х элементов, а не прокси для нужного мне векторного класса (так что доступ к внутреннему вектору так же прост, как и к другим векторам).

Я также получаю предупреждение:

swig/python detected a memory leak of type 'ns::uint64_t *', no destructor found.

потому что для этого типа не определен деструктор.

Есть идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос