提问人:uuu777 提问时间:4/18/2023 最后编辑:uuu777 更新时间:4/19/2023 访问量:112
swig 忽略未知的基类
swig ignoring unknown base class
问:
我正在使用 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
示例.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 警告。
答:
2赞
Mark Tolonen
4/18/2023
#1
您可以为 SWIG 定义一个虚拟基类,以静默该特定类的警告,并忽略它,使其不会暴露给 Python:
%module example
%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}
%ignore Base;
class Base {};
%include example.h
评论
0赞
uuu777
4/21/2023
如果未知基类是模板,它也有效:
评论