使用SWIG将C ++ std :: map转换为PHP

时间:2015-08-19 16:14:00

标签: php c++ swig

我有一个C ++的PHP扩展,我使用SWIG来包装它。我正在尝试创建一个用C ++实现的类:

Package(const std::map<std::string,std::string> &input_map, const std::queue<std::string> &dates_queue);
使用此脚本在PHP中

<?php 
require "prq.php";

$input = array("dataset" => "a050119", "station" => "a050119", "flag" => "1");
$dates = array(1 => "read;chunk;2015-07-01 00:00;2015-07-02 00:00");

$package = new Package($input, $dates); 
?>

但是我收到了错误:

PHP Fatal error:  Type error in argument 1 of new_Package. Expected SWIGTYPE_p_std__mapT_std__string_std__string_t in /home/jlahowetz2/development/package-request-queue/swig/prq.php on line 230

这是有道理的...我不知道如何在PHP中实现std :: map。我查看了SWIG创建的C ++包装器,并为此找到了类型转换:

static swig_type_info _swigt__p_std__mapT_std__string_std__string_t = {"_p_std__mapT_std__string_std__string_t", "std::map< std::string,std::string > *", 0, 0, (void*)0, 0};

我的问题是:如何在PHP中使用此类型转换将std :: map传递给我的构造函数?非常感谢。

1 个答案:

答案 0 :(得分:0)

添加

%template(mapStuff) std::map<std::string, std::string>;

到接口文件,然后在PHP中将其视为代理类。