gpt4 book ai didi

java - 使用 SWIG 为 C++ 类创建 java 绑定(bind)

转载 作者:太空狗 更新时间:2023-10-29 23:06:05 25 4
gpt4 key购买 nike

借助 SWIG,我能够为我的 C++ 代码创建简单的绑定(bind)。

我的问题是多重继承。

我们的 C++ 代码库有一个 iClass 作为基类,它充当接口(interface)。我们还有派生自两个类的类,其中一个是这个接口(interface)类。

现在我的问题是我们是否可以使用 SWIG 为这样的代码库创建绑定(bind),假设我们可以将类 iClass 作为 Java 中的接口(interface)。

它仍然是多重继承,但它是一个非常具体的例子,类似于 java 的接口(interface)概念。

最佳答案

SWIG 的情况是它确实只会扩展您列出的第一个基类(在下面的代码示例中为 I1)并忽略其余部分。有趣的是,C++ 编译代码将包含所有基本方法,只是它们对 Java JNI 包装器不可用。

多重继承是接口(interface)之外的另一种范例,这使得很难将 Java 中的对象转换/解释为属于特定接口(interface)。

不过,您可以做的是——这确实有点难看——是将编译器指令添加到从多个类继承的类的头文件中。像这样:

class Foo : public I1, I2
{
public:
Foo();
~Foo();

#ifdef SWIG
void aI2Method();
double aI2Property;
#endif

protected:
void bar();
}

使用 SWIG 编译时,属性 SWIG 被定义。因此,方法“aI2Method”和公共(public)属性“aI2Property”(为了论证,我们假设它们在基类 I2 中定义)由 SWIG 使用,并在此类“Foo”的 JNI 包装器中定义。只需在条件指令之间添加公共(public)方法/属性。

在 Java 中,您可以在 Foo 上调用“aI2Method”或获取/设置公共(public)“aI2Property”属性,本地编译代码将在 I2 基类上调用这些。请注意,这意味着您不需要在“Foo”的 .cpp 文件中添加包含这些方法的定义或函数体的相同指令,因为将其放在头文件中就足够了。这样,至少 .cpp 文件保持干净。

关于java - 使用 SWIG 为 C++ 类创建 java 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16948952/

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