Swig std :: map <std :: string,t =“”>

时间:2015-07-17 17:31:16

标签: dictionary swig

我试图将C ++ std :: map转换为C#。 我知道有一种方法可以使用std_map.i来做到这一点,但是如果我为每个类编写一个新的模板,例如

,它似乎才有效。
%template(String_Foo_Map) std::map<std::string, Foo>;
%template(String_Bar_Map) std::map<std::string, Bar>;
...

无论使用何种类型,有没有办法自动生成?像

这样的东西
%template(String_T_Map) std::map<std::string, T>;

它会创建

String_Foo_Map
String_Bar_Map
...

1 个答案:

答案 0 :(得分:0)

您可以为SWIG定义宏,类似于为Numpy执行的操作

标头文件

#include <map>
#include <string>

class A {
public:
  A() : m_a(1.0f) {}
  float m_a;
};

class B {
public:
  B() : m_b(2.0f) {}
  float m_b;
};

SWIG界面文件

%module test

%{
#include "test.h"
%}

%include "std_map.i"
%include "std_string.i"
%include "test.h"

%define %my_templates(DATA_TYPE)
%template(String_ ## DATA_TYPE ## Map) std::map<std::string, DATA_TYPE>;
%enddef

%my_templates(A)
%my_templates(B)

示例现已完成