我需要从 Objective C++ 调用一个 growl Action
- (NSDictionary *) registrationDictionaryForGrowl {
return [NSDictionary dictionaryWithObjectsAndKeys:
[NSArray arrayWithObject:@"Alert"], GROWL_NOTIFICATIONS_ALL,
[NSArray arrayWithObject:@"Alert"], GROWL_NOTIFICATIONS_DEFAULT
, nil];
}
是 Objective C 中的操作,但我需要将其放入 .mm
文件(Objective C++)中,我很难正确转换它,因为我需要将它在 (C++) 类内的 (C++) 函数内。
知道如何将其转移到 Objective C++ 吗?
最佳答案
据我了解,您想向 Growl 提供一个 C++ 对象,它需要一个 Objective-C 对象。你不能这样做。
Objective-C 是一组焊接到 C 上的语言扩展。Objective-C++ 是将完全相同的扩展焊接到 C++ 上的结果。所以在 Objective-C++ 中,你同时拥有 Objective-C 风格的对象和 C++ 对象,它们是完全不同的东西。一个不能在需要时使用另一个。它们具有不同的 ABI、解决方法调用/消息发送的不同方案、不同的生命周期管理等。
Objective-C++ 的目的不是让 Objective-C 对象和 C++ 对象兼容,而只是让 Objective-C 代码可以从 C++ 使用,C++ 代码可以从 Objective-C++ 使用。
因此,您可以做的是创建要用作委托(delegate)的 C++ 类,然后创建一个 Objective-C++ 类来包装您的 C++ 类,并具有仅转发到 C++ 类实例的方法。
class Foo {
int bar(int i) { return i+1; }
};
@interface ObjCFoo : NSObject
{
Foo foo;
}
- (int) bar:(int) i;
@end
@implementation ObjFoo
- (int) bar:(int) i;
{
return foo.bar(i);
}
@end
关于c++ - Objective-C++ 调用 Objective-C ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570116/