Карта STL в Perl с использованием SWIG

. Это дубликат моего вопроса в списке рассылки SWIG .

Я пытаюсь использовать контейнеры stl в своих привязках SWIG.Все работает отлично, за исключением обработки карт stl в Perl. На стороне С++ у меня есть

std::map TryMap(const std::map &map) {
  std::map modified(map);
  modified["7"] = "!";
  return modified;
}

Конфигурация SWIG выглядит так

%module stl

%include "std_string.i"

%include "std_map.i"
%template(StringStringMap) std::map;

%{
  #include "stl.h"
%}

%include "stl.h"

В моем сценарии Python я могу вызывать TryMap следующим образом

print dict(stl.TryMap({'a': '4'}))

и получить красивый результат

{'a': '4', '7': '!'}

но в Perl я называю

print Dumper stl::TryMap({'a' => '4'});

и получаю ошибку

TypeError in method 'TryMap', argument 1 of type 'std::map< std::string,std::string > const &' at perl.pl line 7.

Я действительно могу сделать что-то вроде

my $map = stl::TryMap(stl::StringStringMap->new());
print $map->get('7');

и получить '!', но это не вариант, потому что существует много устаревшего кода, использующего «TryMap», который ожидает в качестве вывода обычный хэш Perl.

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

Есть ли способ обрабатывать карту stl с помощью Perl в SWIG? Я использую последнюю версию SWIG 2.0.7

. ОБНОВЛЕНИЕ Возможно, что-то не так с perl5/std_map.i. Слишком коротко =)

$ wc -l perl5/std_map.i python/std_map.i 
   74 perl5/std_map.i
  305 python/std_map.i

32
задан quantum 16 July 2012 в 21:01
поделиться