c++ - Objective-C++ 调用 Objective-C

标签 c++ objective-c objective-c++ growl

我需要从 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/

相关文章:

c++ - 在 C++ 中使用静态类

c++ - c++ mac OS 中的自动化单元测试

c++ - 在 C++ 中将我的类分离到不同的头文件中

iphone - 如何识别屏幕上的对角线滑动?

ios - UIScrollview 停留在不正确的 contentOffset(-20 像素,而不是 0 像素)

cocoa - 关于 NSoutlineView 和 WriteItem |拖放问题

ios - 在 React Native 0.68 中启用 TurboModule 和 Fabric 会导致很多错误

objective-c++ - 如何 stop() 主线程 NSApp run() 事件循环? (嵌入在 C++ 中)

c++ - 递减和取模 - 如何在一行代码中递减负值

objective-c - 如何从 Objective-C 调用带有闭包的 Swift 异步方法