Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何向SWIG传递Perl数组?_Perl_Swig - Fatal编程技术网

如何向SWIG传递Perl数组?

如何向SWIG传递Perl数组?,perl,swig,Perl,Swig,在Perl中,我习惯于在sub之间传递数组 sub abc { foreach my $x (@_) { print $x; } return (0, 1, 2); } 如何使用SWIG'ed函数实现类似的行为 喝这个: std::vector<int> print_list(std::vector<int> l) { std::vector<int>::iterator iter; for(iter=l.begin(); iter!=l.e

在Perl中,我习惯于在sub之间传递数组

sub abc {
  foreach my $x (@_) { print $x; }
  return (0, 1, 2);
}
如何使用SWIG'ed函数实现类似的行为

喝这个:

std::vector<int> print_list(std::vector<int> l)
{
  std::vector<int>::iterator iter;
  for(iter=l.begin(); iter!=l.end(); iter++) {
    printf("int %d\n", *iter);
  }

  return l;
}
std::vector打印列表(std::vector l)
{
std::vector::iter;
对于(iter=l.begin();iter!=l.end();iter++){
printf(“int%d\n”,*iter);
}
返回l;
}
生成一个需要数组引用并返回数组引用的子对象?我正在使用SWIG附带的stl模板


我需要为这个写一个打字图吗?这似乎已经在某个地方讨论过了。

类型映射已经为您编写了代码,但您仍然需要实例化它

如中所述,您必须将
向量声明为
向量
,并将Perl数组转换为它

如果你想有一个透明的转换,你必须自己编码类型映射

使用您的示例编写下面的示例

print_list.hxx
如果向量必须从C++函数返回,并在Perl中作为数组捕获,那么你有代码片段吗?
#include <vector>
std::vector<int> print_list(std::vector<int> l);
#include <cstdio>
#include <vector>

#include "print_list.hxx"

using namespace std;

vector<int> print_list(vector<int> l) {
    vector<int>::iterator iter;
    for(iter=l.begin(); iter!=l.end(); iter++) {
        printf("int %d\n", *iter);
    }
    return l;
}
%module print_list
%include "std_string.i"
%include "std_vector.i"

namespace std {
    %template(vectori) vector<int>;
    %template(vectord) vector<double>;
};


%{
#include "print_list.hxx"
%}


%include "print_list.hxx"
#! /usr/bin/perl
use Data::Dumper;

use print_list;

my @row = (1, 2, 4);
my $vi = new print_list::vectori();
foreach my $val (@row) {
    $vi->push($val);
}

print Dumper(print_list::print_list($vi));