我是swig的新手,我正在尝试用Perl将c++ map转换为散列。
有一个使用C++的Perl扩展需要返回一个多维数组或Map到Perl。我已经在swig接口文件中使用了模板,但它给出了空结果。
- 刷卡接口文件:**
%include "exception.i"
%exception {
try {
$action
} catch (const std::exception &e) {
SWIG_exception_fail(SWIG_RuntimeError, e.what());
}
}
%module new_tr
%{
/* Put headers and other declarations here */
#include "new_tr.h"
%}
%include <std_map.i>
%template(StringStringMap) std::map<int, std::map<std::string,std::string>>;
%include "new_tr.h"
- cpp文件**
std::map<int, std::map<std::string,std::string>> Memberfunction::m;
std::map<int, std::map<std::string,std::string>> Memberfunction::getResult()
{
return m;
}
- perl文件**
use strict;
use new_tr;
use Data::Dumper;
my $new=new new_tr::some();
print Dumper($new->getResult());
电流输出:
$VAR1 = bless( {}, 'new_tr::StringStringMap' );
预期输出:(多维散列)
$VAR1 = bless( 0 => {
'Brown' => 'Manager',
'Smith' => 'Salesman',
'Albert' => 'Salesman',
},
1 => {
'Penfold' => 'Designer',
'Evans' => 'Tea-person',
'Jurgens' => 'Manager',
}, 'new_tr::StringStringMap' );
1条答案
按热度按时间nbnkbykc1#
下面是一个示例,说明如何将
%typemap
用于嵌套的std::map
。然后使用以下命令编译模块:
并使用test.pl对其进行测试: