C++ callback 结构体数组传到unity上层

本文探讨了在Unity SDK开发中,如何将C++底层的自定义数据结构通过callback回调到Unity上层。文章通过实例展示了C++和C#的代码实现,特别强调了对于简单类型如int、float的处理并无障碍,但自定义结构体的回调过程成为了一项挑战。

运行场景:

最近在做unity sdk,所有的功能都要从C++底层开始封装成C#,遇到一个问题,C++ 如何回调自定义数据结构到unity上层,简单的类型,int,float都没问题。

C++ Code

//自定义数据结构
typedef struct PointInfo {
    float x;
    float y;
}PointInfo;

typedef void(__stdcall *OnTouchDownListener)(void *point,int a);

OnTouchDownListener onTouchDown;
extern "C" {
    int SetTouchListner(OnTouchDownListener listener) {
        onTouchDown = listener;
    }
    int StartCallBack(){

        PointInfo p[] = {
            {
  
  
### 定义并使用包含函数指针的结构体数组 在Qt中,可以通过定义一个包含函数指针的结构体,并将其作为一个数组成员嵌入到类中。以下是实现这一功能的具体方法: #### 1. 结构体定义 首先,定义一个包含函数指针的结构体。假设我们希望这个结构体能够存储不同类型的回调函数。 ```cpp struct CallbackStruct { const char* name; // 名字用于标识不同的回调 void (*callback)(int); // 函数指针,接受一个整型参数并返回void }; ``` 此部分说明了一个名为 `CallbackStruct` 的结构体,其中包含了两个字段:一个是字符串指针 `name`,另一个是指向接受整数参数并返回无类型数据的函数的指针[^1]。 #### 2. 类定义 接着,在类中声明一个这种结构体数组作为私有成员变量。 ```cpp class MyClass : public QObject { Q_OBJECT public: MyClass(QObject *parent = nullptr); ~MyClass(); private: CallbackStruct callbacks[3]; // 假设我们需要三个这样的结构体实例 }; ``` 这里创建了一个继承自QObject的类 `MyClass`,它有一个长度为三的 `CallbackStruct` 数组作为其成员之一[^2]。 #### 3. 初始化列表构造器 为了初始化这些结构体及其内部的函数指针,可以利用C++中的初始化列表或者直接赋值的方式完成设置工作。 ```cpp // 示例函数供测试用 void callbackFunctionA(int value) { qDebug() << "Called A with:" << value; } void callbackFunctionB(int value) { qDebug() << "Called B with:" << value; } MyClass::MyClass(QObject *parent) : QObject(parent), callbacks{ {"FuncA", &callbackFunctionA}, {"FuncB", &callbackFunctionB}, {"None", nullptr} // 如果不需要第三个,则置为空 } {} MyClass::~MyClass() {} ``` 上述代码展示了如何通过初始化列表来设定各个结构体内含的数据以及对应的函数地址。 #### 4. 调用示例 最后展示一下如何调用这些已注册好的回调函数。 ```cpp void MyClass::invokeCallbacks() { for (int i = 0; i < 3 && callbacks[i].callback != nullptr; ++i){ int paramValue = i + 1; if(callbacks[i].callback){ callbacks[i].callback(paramValue); } } } ``` 在此段落里描述了一种遍历方式去逐一执行每一个有效的回调操作。 ### 总结 以上就是关于如何在Qt框架下的类中定义和运用带有函数指针特性的结构体数组的一个完整例子。这不仅体现了面向对象编程的强大能力,同时也充分利用了C/C++底层特性提供了灵活多变的应用场景支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值