Geo*_*che 3 c++ macos objective-c objective-c++
我正在将Objective-C部件混合到一个C++项目中(请不要争论它,它的跨平台).
我现在想在cocoa环境中的正确线程(即主线程)上调用一些C++函数或方法.
我目前的方法是将函数指针传递给objective-c实例(派生自NSObject)和do performSelector/ performSelectorOnMainThreadon.
但是performSelectors期望对象作为他们的参数,那么通常如何包装它?
例:
typedef void(*FnPtr)(void*);
FnPtr fn;
[someInstance performSelector:@selector(test:) withObject:fn];
Run Code Online (Sandbox Code Playgroud)
...测试被声明为:
- (void)test:(FnPtr)fn;
Run Code Online (Sandbox Code Playgroud)
不得不补充一点,我本周才开始使用objective-c,所以如果有更好的方法,我也很高兴听到它.
另请注意,我无法访问主循环或任何应用程序对象,因为该项目是一个浏览器插件(目前仅在mac上定位Safari).
正如smorgan 在这里所回答的那样,它NSValue被设计为标量C和Objective-C类型的容器:
- (void)test:(NSValue*)nv
{
FnPtr fn = [nv pointerValue];
// ...
}
// usage:
NSValue* nv = [NSValue valueWithPointer:fn];
[someInstance performSelector:@selector(test:) withObject:nv];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |