swig 忽略未知的基类

swig ignoring unknown base class

提问人:uuu777 提问时间:4/18/2023 最后编辑:uuu777 更新时间:4/19/2023 访问量:112

问:

我正在使用 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 警告。

C++ 警告 swig suppress-warnings

评论


答:

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
如果未知基类是模板,它也有效: