在类中包含枚举,不包括SWIG中的枚举

时间:2015-03-10 17:08:35

标签: c++ enums 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头文件中的枚举,但我无法找到一种方法。只有函数可以忽略方法/类,但没有选择它们。

有没有办法根据头文件生成枚举?

2 个答案:

答案 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::开头的所有内容。但它确实解决了我的问题。