SWIG和Boost :: variant

问题描述 投票:2回答:1

我正在尝试使用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类{...

python c++ boost swig
1个回答
0
投票

您可以执行此操作。我想了很长时间,想知道boost::variant的最整洁的Python界面实际上是什么。我的结论是,Python用户99%的时间甚至都不应该意识到正在使用一种变体类型-联合和变体基本上只是C ++的鸭子式输入。

© www.soinside.com 2019 - 2024. All rights reserved.