Objective-C++:有没有办法出售 C++ 对象?
Posted
技术标签:
【中文标题】Objective-C++:有没有办法出售 C++ 对象?【英文标题】:Objective-C++: Is there any way to vend a C++ object? 【发布时间】:2012-07-19 20:37:56 【问题描述】:我正在大量使用 Objective-C++。我知道虽然我可以在我的 Objective-C 代码中包含 C++ 代码,但反之则不然。我想通过分布式对象将我创建的自定义 C++ 对象出售给我的 Objective-C 进程。当我尝试这样做时,我收到以下错误消息:
error: cannot convert ‘custom_class*’ to ‘objc_object*’ in argument passing
有没有办法将自定义 C++ 对象出售给另一个 Objective-C 进程?
我的代码:
#import <Cocoa/Cocoa.h>
#import <iostream>
#import <stdio.h>
using namespace std;
class custom_class
public:
custom_class();
~custom_class();
void hello();
;
custom_class::custom_class()
custom_class::~custom_class()
void custom_class::hello() cout << "Hello World!" << endl;
int main()
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
cout << "Starting vendor " << endl;
custom_class *test = new custom_class();
NSConnection *connection = [NSConnection connectionWithReceivePort:[NSPort port] sendPort:nil];
[connection setRequestTimeout:1];
[connection setRootObject:test];
[connection registerName:@"DisObjTest"];
[[NSRunLoop currentRunLoop] run];
[pool drain];
return 0;
【问题讨论】:
您可能对这个问题感兴趣:***.com/questions/10014684/… 【参考方案1】:如果不将 C++ 类包装在 Objective-C 类中,就无法做到这一点。所有使分布式对象成为可能的运行时机制在 C++ 中都不可用。
【讨论】:
这就是我的假设。但是,据我所知,我的 C++ 代码中不能包含 Obj-C。这就是我目前遇到的问题。 编译成Objective-C++就可以了【参考方案2】:将其封装在一个 Objective-C 接口中:
class custom_class;
@interface custom_class_wrapper : NSObject
@propery (nonatomic, assign) custom_class* obj;
@end
或者在NSValue
中,这需要强制转换
custom_class a;
id obj = [NSValue valueWithPointer:&a];
custom_class* a_val = static_cast<custom_class*>([obj pointerValue]);
【讨论】:
这会将指针值传递给其他进程,在那里它将无用。以上是关于Objective-C++:有没有办法出售 C++ 对象?的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C 有没有办法判断一个对象是不是设置为自动释放?