gpt4 book ai didi

c++ - 痛饮 : How to typemap two fields of a struct?

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

我正在使用 Swig 将 C/C++ 包装到 Java 中。

我有这个结构:

struct score {
void* goals;
uint32_t goals_number;
}

我需要使 goals 和 goals_number 相等。

这种类型映射仅在函数参数奇偶校验的情况下对我有用:

%apply (unsigned int *OUTPUT, size_t LENGTH) { (void* goals, uint32_t goals_number) };

如何在结构字段上应用奇偶校验?怎么做?

非常感谢!

编辑:

我需要在 Java 端以这种方式获取 getter 和 setter 的签名:

public class Score {

// ... other methods

void setGoals( int goals[] ){
//...
}

int[] getGoals(){
//...
// goals.length must be equal to "goals_number"
}
}

代替:

  public void setGoals(SWIGTYPE_p_void value) {
MyModuleJNI.Score_goals_set(swigCPtr, this, SWIGTYPE_p_void.getCPtr(value));
}

public SWIGTYPE_p_void getGoals() {
long cPtr = MyModuleJNI.Score_goals_get(swigCPtr, this);
return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
}

public void setGoals_number(long value) {
MyModuleJNI.Score_goals_number_set(swigCPtr, this, value);
}

public long getGoals_number() {
return MyModuleJNI.Score_goals_number_get(swigCPtr, this);
}

最佳答案

试试 %extend 指令:

// score.i:
%{
#include "Score.h"
%}

%include "Score.h"

%extend Score %{
void setGoals( int goals[] ){
//... use $self->goals_number and $self->goals to populate
// goals array
}

int* getGoals(){
//...
int* swigGoals = new int[$self->goals_number];
// populate swigGoals, then
return swigGoals;
}
%}

如果您希望能够修改返回的数组,您可能需要修改一下。

您可能希望隐藏这两个公共(public)属性,以便它们在 Java 中不可见(使用 %ignore Score::goals 等)。

关于c++ - 痛饮 : How to typemap two fields of a struct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22146465/

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