Objective C++ call Objective C
Objective C++ call Objective C
我有一个咆哮动作需要从目标C++调用
- (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++)函数中。
你知道我如何把它转移到ObjectiveC++上吗?
根据我的了解,您希望向Growl提供一个C++对象,Growl需要和Objective-C对象。你不能这样做。
Objective-C是焊接到C上的一组语言扩展。Objective-C++是将完全相同的扩展焊接到C++上的结果。因此,在Objective-C++中,既有Objective-C风格的对象,也有C++对象,它们是完全不同的东西。一个不能在需要另一个时使用。它们有不同的ABI、解决方法调用/消息发送的不同方案、不同的生存期管理等。
Objective-C++的目的不是使Objective-C对象和C++对象兼容,而是简单地使ObjectiveC代码可以从C++中使用,C++代码可以从Objective-CC++中使用。
因此,您可以创建要用作委托的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
在Objective-C++中有C++类和Objective-C类。没有Objective-C++类。实现registrationDictionaryForGrowl
的GrowlApplicationBridgeDelegate
必须是Objective-C对象。您可以在.mm文件中定义与在.m文件中完全相同的值。唯一的区别是,在.mm文件中,您定义的Objective-C类可以调用并使用C++类和语法。
我不知道你怎么称呼Objective-C++,但如果上面的代码位于Objective-C@implementation
部分,无论是否启用Objective-CC++(.m
或.mm
扩展),都会编译得很好。
顺便说一句,如果你使用的是Xcode 4.4或更高版本,以下也可以:
- (NSDictionary*) registrationDictionaryForGrowl {
return @{
GROWL_NOTIFICATIONS_ALL : @[ @"Alert" ],
GROWL_NOTIFICATIONS_DEFAULT : @[ @"Alert" ] };
}
- 如何将数组从Objective-C发送到C++函数
- 在 Objective-C++ -> EXC_BAD_ACCESS Error 中使用"new"关键字
- Mac Snow Leopard 上的 Qt 5.3.2:ld:在架构x86_64 [clang、Objective-C
- 创建跨平台 C++ 触摸管理器.在 c++ 中传递 Objective-c 对象涉及代码
- C++对象作为 Objective-C++ 属性
- 将.cpp文件中的数据传递给Objective c ViewController
- 为什么这个来自 Objective-C++ 的dynamic_cast在调试中成功但在发布时失败?
- Objective-C 如何使用向量对?
- 在 Objective-C 和 Swift 之间委托问题
- Objective-C C++ 包装器 类型错误的不完整定义
- EXC_BAD_ACCESS Xcode,来自我的 Objective-C++ 和 swift 桥接标头中的 C++ 包
- 在 Objective-C++ 中应用于__weak指针时,通过关键字推导类型"auto"规则是什么?
- 如何发送(和接收)从 Swift 到 Objective c++ 再到 c++,然后备份到 Swift 的超大型浮动数组
- 使用来自Objective C的OpenCV分解同源异构图
- 如何将这行代码从C++转换为Objective-C
- Firebase:混合使用C++和Objective-C SDK可以吗
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 有没有办法将函数从 objective-c++ 传递到标准 c++
- 从Objective-C中的C 标头读取变量
- Objective-C 块中的泄漏C++ shared_ptr