swig 忽略未知基类

问题描述 投票:0回答:1

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

c++ warnings swig suppress-warnings
1个回答
0
投票

您可以为 SWIG 定义一个虚拟基类,以消除针对该特定类的警告,并忽略它,这样它就不会暴露给 Python:

%module example

%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}

%ignore Base;
class Base {};
%include example.h
© www.soinside.com 2019 - 2024. All rights reserved.