swig нет соответствующей функции для перегрузки

У меня есть проблема с переносом кода на C ++ в PHP с помощью SWIG: у меня есть класс в C ++ с методом, который указан ниже:

int hexDump(string &dmpstr,bool space=true)const; 

также я включаю std_string.i в свой файл интерфейса, и я могу успешно передать строковые аргументы. но когда я вызываю свой метод в своем PHP-коде, как показано ниже:

 $bf->hexDump('12',true); 

Я получил эту ошибку:

 Fatal error: No matching function for overloaded 'PKI_Buf_hexDump' 

PKI_Buf – это имя моего класса. Есть идеи??

    Проблема здесь, похоже, в том, что тип typecheck для ссылок, не связанных со строкой, отсутствует, и поэтому во время разрешения перегрузки SWIG отвергает то, что действительно является подходящим кандидатом для вызова.

    Вы можете обойти это, добавив свою собственную typecheck, я сделал пример:

     %module test %include <std_string.i> %typemap(typecheck,precedence=141) std::string& str { $1 = Z_TYPE_PP($input) == IS_STRING; } %{ #include <iostream> %} %inline %{ void func(std::string& str, bool b=false) { std::cout << "In C++: " << str << "\n"; str = "output"; } %} 

    Я не слишком уверен, какова правильная ценность приоритета . Я выбрал 141, потому что это делает его ниже, чем значение по умолчанию.

    Я проверил, что все работает правильно:

     <?php include('test.php'); echo "testing\n"; $str = "input"; test::func($str, true); echo "In PHP: " . $str . "\n"; ?> в <?php include('test.php'); echo "testing\n"; $str = "input"; test::func($str, true); echo "In PHP: " . $str . "\n"; ?> 

    Что работало, как ожидалось.

    Я думаю, что тот факт, что typecheck typemap для этого не работает по умолчанию, является ошибкой, так как тип typecheck, который он использует, никогда не будет работать. Возможно, вы захотите поднять это в списках рассылки.