gpt4 book ai didi

c++ - 通过 performSelector 传递指针或整数类型

转载 作者:太空狗 更新时间:2023-10-29 20:49:07 24 4
gpt4 key购买 nike

我正在将 Objective-C 部分混合到一个 C++ 项目中(请不要争论这个,它是跨平台的)。
我现在想在 cocoa 环境中的正确线程(即主线程)上调用一些 C++ 函数或方法。

我目前的方法是将函数指针传递给 objective-c 实例(派生自 NSObject)并对其执行 performSelector/performSelectorOnMainThread
但是 performSelector 期望对象作为它们的参数,那么通常如何包装它呢?

示例:

 typedef void(*FnPtr)(void*);
FnPtr fn;
[someInstance performSelector:@selector(test:) withObject:fn];

...其中测试声明为:

- (void)test:(FnPtr)fn;

必须补充一点,我这周才开始使用 objective-c,所以如果有更好的方法,我也很乐意听到。
另请注意,我无权访问主循环或任何应用程序对象,因为该项目是一个浏览器插件(目前仅针对 mac 上的 Safari)。

最佳答案

正如 smorgan 的回答 hereNSValue 被设计为标量 C 和 Objective-C 类型的容器:

- (void)test:(NSValue*)nv
{
FnPtr fn = [nv pointerValue];
// ...
}

// usage:
NSValue* nv = [NSValue valueWithPointer:fn];
[someInstance performSelector:@selector(test:) withObject:nv];

关于c++ - 通过 performSelector 传递指针或整数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1707164/

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