我正在尝试使用SWIG将c ++项目包装到python api中,并且遇到了以下格式的代码问题。
class A
{
//constructors and such.
};
class B
{
//constructors and such.
};
class C
{
//constructors and such.
};
typedef boost::variant<A,B,C> VariantType;
typedef std::vector<boost::variant<A,B,C>> VariantTypeList;
A,B和C类全部在python包装器中出现,没有问题,似乎可以使用。但是,当我尝试将以下行添加到接口文件中时
%template(VariantType) boost::variant<A,B,C>;
%template(VariantTypeList) std::vector<boost::variant<A,B,C>>;
我收到一个错误提示
Boost \ x64 \ include \ boost \ variant \ variant.hpp(148):错误:输入(3)中的语法错误。
所以我去查看错误及其行,该行具有在另一个头文件(特别是“ boost / mpl / aux_ / value_wknd.hpp”)中定义的宏,因此我将其添加到具有%include的接口文件中似乎SWIG.exe崩溃并显示错误提示:>
访问冲突
长话短说,有没有办法包装boost :: variant模板类型?不幸的是,此模板定义已纳入我们库的核心,现在无法更改。另外,如果有问题,我正在使用MSVC 2013编译器。
如果无法直接包装模板类型,是否可以解决此问题?我正在阅读SWIG文档,以了解是否可以应用某些类型映射魔术,但对于SWIG来说,我一般还是比较陌生。
我正在尝试使用SWIG将c ++项目包装到python api中,并且遇到了以下格式的代码问题。 A类{//构造函数等。 }; B类{...
您可以执行此操作。我想了很长时间,想知道boost::variant
的最整洁的Python界面实际上是什么。我的结论是,Python用户99%的时间甚至都不应该意识到正在使用一种变体类型-联合和变体基本上只是C ++的鸭子式输入。