gpt4 book ai didi

java - 痛饮+Java : namespaces and packages

转载 作者:太空宇宙 更新时间:2023-11-04 13:35:40 31 4
gpt4 key购买 nike

假设 C++ 类结构如下:

namespace MainNS
{
namespace A
{
class Class
{
//...
};
}

namespace B
{
class Class
{
//...
};
}

//...
}

我已经关注了这个 SWIG 文档:http://www.swig.org/Doc3.0/Java.html#Java_namespaces

在接口(interface)文件中,我定义了以下内容以在 Java 端创建包:

%nspace MainNS::A::Class
%nspace MainNS::B::Class

然后必须使用 java将 JNI 文件放入“适当”位置的编译指示(类可以访问它的地方 - 这是问题的核心,请参见下文):

%pragma(java) jniclasspackage = "MainNS::A" //or "MainNS::B"

现在,类的每个人MainNS::A::Class (包 MainNS.A )可以访问生成的 <modulename>JNI类。

但是,命名空间 B以不同的包装结束 MainNS::BMainNS::B::Class (包 MainNS.B )无法访问 <modulename>JNI类。

这个问题的解决方案是什么?据我所知,没有 SWIG 选项可以将生成的 JNI 类与 native 函数签名分开?

最佳答案

这是一个很老的话题,但是因为我遇到了类似的问题:

我要解决这个问题的方法是创建两个不同的模块,A 和 B(以及两个不同的 swig 接口(interface)文件 A.i 和 B.i)。你可以导入每个文件(使用 %import 而不是 %include)

%module A 
%{
#include <MainNS/A.hxx>
%}
%feature(nspace);
%pragma(java) jniclasspackage="MainNS.A";

%import "B.i"
%include <MainNS/A.hxx>

然后 B.i:

%module B 
%{
#include <MainNS/B.hxx>
%}
%feature(nspace);
%pragma(java) jniclasspackage="MainNS.B";

%import "A.i"
%include <MainNS/B.hxx>

链接:

关于java - 痛饮+Java : namespaces and packages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29663453/

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