如何禁用std::vector的自动映射<;标准::向量<;双倍>&燃气轮机;在swigpython中创建元组的元组?

如何禁用std::vector的自动映射<;标准::向量<;双倍>&燃气轮机;在swigpython中创建元组的元组?,python,swig,Python,Swig,显然,swig会自动将std::vector转换为一个元组。我想防止这种情况,我希望类型保持原样。我怎样才能做到呢?我尝试为类型指定一个定义 %template(StdVectorStdVectorDouble) std::vector<std::vector<double> >; %模板(StdVectorStdVectorDouble)std::vector; 但显然它不起作用。两种技术: %在SWIG处理函数之前,清除类型的类型映射 SWIG处理函数后声明%模板

显然,swig会自动将std::vector转换为一个元组。我想防止这种情况,我希望类型保持原样。我怎样才能做到呢?我尝试为类型指定一个定义

%template(StdVectorStdVectorDouble) std::vector<std::vector<double> >;
%模板(StdVectorStdVectorDouble)std::vector;
但显然它不起作用。

两种技术:

  • %在SWIG处理函数之前,清除类型的类型映射
  • SWIG处理函数后声明
    %模板
  • 例1
    %x模块
    %开始%{
    #杂注警告(禁用:4127 4211 4701 4706)
    %}
    %包括
    %模板(vd)std::vector;
    %模板(vvd)std::vector;
    %清晰的std::载体;
    %内联%{
    #包括
    std::vector func()
    {
    std::向量温度;
    std::载体a;
    a、 推回(1.5);
    温度推回(a);
    返回温度;
    }
    %}
    
    例2
    %x模块
    %开始%{
    #杂注警告(禁用:4127 4211 4701 4706)
    %}
    %包括
    %内联%{
    #包括
    std::vector func()
    {
    std::向量温度;
    std::载体a;
    a、 推回(1.5);
    温度推回(a);
    返回温度;
    }
    %}
    %模板(vd)std::vector;
    %模板(vvd)std::vector;
    
    (两者的)结果 win32上的Python 3.3.0(v3.3.0:bd8afb90ebf2,2012年9月29日,10:57:17)[MSC v.1600 64位(AMD64)] 有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。 >>>导入x >>>x.func() >
    %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;
    }
    %}
    
    %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> >