我试图将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
...
答案 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)
示例现已完成