在 class 中包含一个枚举,而不包含 SWIG 中的
Include an enum from within a class, without including the in SWIG
我必须与 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 头文件的枚举,但我找不到这样做的方法。只有忽略 methods/classes 的函数,但是 none 到 select 它们。
有什么办法可以得到根据头文件生成的enum吗?
使用预处理器:
#ifndef SWIG
//what you don't want in swig
#endif
最后我确实找到了一个解决方案,它使用 %rename 来忽略 class 除了枚举和枚举项之外的所有成员。
%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::
开头的内容。但它确实解决了我的问题。
我必须与 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 头文件的枚举,但我找不到这样做的方法。只有忽略 methods/classes 的函数,但是 none 到 select 它们。
有什么办法可以得到根据头文件生成的enum吗?
使用预处理器:
#ifndef SWIG
//what you don't want in swig
#endif
最后我确实找到了一个解决方案,它使用 %rename 来忽略 class 除了枚举和枚举项之外的所有成员。
%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::
开头的内容。但它确实解决了我的问题。