gpt4 book ai didi

java - 无法在 SWIG 包装器中公开私有(private)基类成员函数

转载 作者:行者123 更新时间:2023-11-28 05:36:56 26 4
gpt4 key购买 nike

我正在使用 SWIG 为 Android 应用程序包装一些 C++ 代码。当我使用一个从另一个私有(private)继承的类并在其中抛出几个 using 指令以公开一些父类的成员函数时,我遇到了一个问题。看起来像这样:

#include "Bar.h"

class Foo : private Bar {

//Stuff Foo-specific...

public:
using Bar::baz;
};

问题是,当我运行 SWIG 时,我在包装期间收到以下消息:

Foo.h:8: Warning 315: Nothing known about 'Bar::baz()'.

注意:两个 header 都包含在包装文件中,只有 Foo header 被包装,因为我不希望 Bar header 被包装,我的 .i 文件看起来像:

%{
#include "Bar.h"
#include "Foo.h"
%}

%include "Foo.h"

然后,我的 Java 类无法编译,因为它找不到这个符号...

我在 SWIG 文档中读到 private inheritanceusing keyword (尽管没有关于私有(private)继承的示例)应该得到支持,那么我在这里缺少什么?

最佳答案

首先,您的using 语句应该是using Bar::baz;

无论如何,正如 SWIG 在警告中所说,如果它不知道 Bar::baz() 中的声明,它就无法包装 Foo::baz()

因此,您需要向 SWIG 显示声明,例如,通过 %include "Bar.h" 指令。如果您不希望 Bar 被换行,您可以使用额外的 %ignore Bar; 指令。

这是一个最小的工作示例:

%ignore Bar;
%inline %{
class Bar {
public:
double baz() { return 4.2; }
};
class Foo : private Bar {
public:
using Bar::baz;
};
%}

关于java - 无法在 SWIG 包装器中公开私有(private)基类成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com