我必须使用SWIG映射的一些接口使用来自其他库的类的接口。
例如,我有一个const boost::asio::ssl::context::file_format
类型的参数,它引用一个定义为:
// ssl/context_base.hpp
// ~~~~~~~~~~~~~~~~~~~~
// [...]
namespace boost {
namespace asio {
namespace ssl {
class context_base
{
public:
// [...]
/// File format types.
enum file_format
{
/// ASN.1 file.
asn1,
/// PEM file.
pem
};
};
} } }
如果我%include <boost/asio/ssl.hpp>
,那么将生成所有方法,并给我很多不同的错误。
如果我只是将上面的整个定义复制到.i
文件并且(在这种情况下)boost会扩展枚举,我必须记得相应地更改接口文件。
我希望能够只包含boost头文件中的枚举,但我无法找到一种方法。只有函数可以忽略方法/类,但没有选择它们。
有没有办法根据头文件生成枚举?
答案 0 :(得分:0)
使用预处理器:
#ifndef SWIG
//what you don't want in swig
#endif
答案 1 :(得分:0)
最后我找到了一个解决方案,它使用%rename来忽略除枚举和枚举之外的所有类成员。
%rename("$ignore", "not" %$isenum, "not" %$isenumitem, regextarget=1, fullname=1) "^boost::asio::ssl::context_base::";
%include <boost/asio/ssl/context_base.hpp>
这并不完美,因为它会忽略以boost::asio::ssl::context_base::
开头的所有内容。但它确实解决了我的问题。