我有一个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传递给我的构造函数?非常感谢。
答案 0 :(得分:0)
添加
%template(mapStuff) std::map<std::string, std::string>;
到接口文件,然后在PHP中将其视为代理类。