我正在使用 swig 开发一个 c++ -> python 包装器。我试图抑制警告 401:基类“xxx”一无所知。忽略。
base.h:
#ifndef _BASE_H_INCLUDED_
#define _BASE_H_INCLUDED_
class Base {
public:
Base() : result_(0) {}
virtual ~Base() {}
virtual void do_it(int n) {
result_ = n + 2;
}
protected:
int result_;
};
#endif // _BASE_H_INCLUDED_
例子.h:
#ifndef _EXAMPLE_H_INCLUDED_
#define _EXAMPLE_H_INCLUDED_
#include "base.h"
class Derived : public Base {
public:
Derived() {}
virtual ~Derived() {}
void do_it(int n) override;
int get_result() const;
};
#endif // _EXAMPLE_H_INCLUDED
example.cpp:
#include "example.h"
void Derived::do_it(int n) {
result_ = n + 2;
}
int Derived::get_result() const {
return result_;
}
例子.i:
%module example
%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}
// %include base.h
%include example.h
如果 example.i 同时包含 base.h 和 example.h,它编译和运行没有问题。
如果我注释掉“%include base.h”(如图所示),我会收到一个警告,说我无法抑制
example.h:6: Warning 401: Nothing known about base class 'Base'. Ignored.
我尝试添加 '%ignore Base;'在代码的各个地方,警告没有被抑制。
更新:我们不想从命令行中抑制所有 401 警告。
您可以为 SWIG 定义一个虚拟基类,以消除针对该特定类的警告,并忽略它,这样它就不会暴露给 Python:
%module example
%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}
%ignore Base;
class Base {};
%include example.h