У меня есть расширение PHP, которое находится в C ++, и я использовал 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
что имеет смысл … Я понятия не имею, как реализовать std :: map в PHP. Я посмотрел на оболочку C ++, созданную SWIG, и нашел преобразование типа для этого:
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 моему конструктору? Спасибо много.
добавлять
%template(mapStuff) std::map<std::string, std::string>;
к файлу интерфейса, тогда в PHP обработайте его как прокси-класс.
Других решений пока нет …