0

どうやら、 swig は自動的std::vector<std::vector<double> >にタプルのタプルに変換します。これを防ぎたいし、型はそのままにしておきたい。どうすれば達成できますか?型の定義を指定してみた

%template(StdVectorStdVectorDouble) std::vector<std::vector<double> >;

しかし、明らかにそれは機能しません。

4

1 に答える 1

1

2 つの手法:

  1. %clear関数が SWIG によって処理される前の型の型マップ。
  2. 関数が SWIG によって処理された%template に宣言します。

例 1

%module x

%begin %{
#pragma warning(disable:4127 4211 4701 4706)
%}

%include <std_vector.i>
%template(vd) std::vector<double>;
%template(vvd) std::vector<std::vector<double> >;
%clear std::vector<std::vector<double> >;

%inline %{
#include<vector>
std::vector<std::vector<double> > func()
{
    std::vector<std::vector<double> > temp;
    std::vector<double> a;
    a.push_back(1.5);
    temp.push_back(a);
    return temp;
}
%}

例 2

%module x

%begin %{
#pragma warning(disable:4127 4211 4701 4706)
%}

%include <std_vector.i>

%inline %{
#include<vector>
std::vector<std::vector<double> > func()
{
    std::vector<std::vector<double> > temp;
    std::vector<double> a;
    a.push_back(1.5);
    temp.push_back(a);
    return temp;
}

%}

%template(vd) std::vector<double>;
%template(vvd) std::vector<std::vector<double> >;

結果(両方の)

Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import x
>>> x.func()
<x.vvd; proxy of <Swig Object of type 'std::vector< std::vector< double,std::allocator<double > > > *' at 0x00000000025F6900> >
于 2013-05-03T03:03:06.180 に答える