我有一个抽象类,他的具体类实现。 我想要做的是在iOS应用程序(Objective-C)中公开具体类,并使用协议将事件分派给ViewController。允许一个C++抽象类使用Objective-C的委托
的想法是添加一个目标C代表,符合自组织协议,此具体类。 任何想法如何实现它?
不幸的是,我读了的Objective-C++不能从C++类继承。
预先感谢您。
我有一个抽象类,他的具体类实现。 我想要做的是在iOS应用程序(Objective-C)中公开具体类,并使用协议将事件分派给ViewController。允许一个C++抽象类使用Objective-C的委托
的想法是添加一个目标C代表,符合自组织协议,此具体类。 任何想法如何实现它?
不幸的是,我读了的Objective-C++不能从C++类继承。
预先感谢您。
尝试具有-的关系。目标C++对象有一个C++对象,反之亦然。然后让他们知道对方足以让客观的C++对象将消息转发给C++对象。
对不起,如果我迟到了,但我真的很忙。 你能解释得更清楚吗?我不明白。 – Gabriele
如果你宣布一个弱指针ID,你可以声明一个抽象的代表(在NSObject的一类),然后调用自由在CPP源的方法。只需导入包含抽象委托的文件,然后在ObjC类中实现这些方法本身,并且在不声明实际委托的情况下获得一个委托。
这似乎是一个好方法。我会试试看。 在这一刻我解决了创建一个非常类似于NSNotificationCenter的自定义类。主要区别在于此类能够使用void *变量而不是id对象处理对象:(void *)字段。 通过这种方式,我可以观察到由具体的C++类植入提交的特定通知。 具体类向事件通知中心提交事件 目标c对象现在可以观察由任何类型的对象(void *)提交的通知。 您对这个策略有何看法? – Gabriele
客观的C++类不能从一个C++类继承,但它可以包含一个
@interface DelegateObject : NSObject
{
}
- (id) init;
- (void) do_something: (NSObject*) thing;
@end
struct cpp_thing
{
// this could be a template if you wished, or you could take a copy
// or whatever you want
void do_something(NSObject* thing) { };
};
@implementation DelegateObject
{
std::shared_ptr<cpp_thing> _cpp;
}
- (id) init
{
if (self = [super init])
{
_cpp = std::make_shared<cpp_thing>();
}
return self;
}
- (void) do_something: (NSObject*) thing
{
_cpp->do_something(thing);
}
@end
您还可以告诉我们如何在Objective-C和C++之间实现委托功能吗? –
@AdnanZahid完成 –
客观的C++类不能从C++的类继承,但它可以包含一个 –
@RichardHodges这正是问题。你能把它写成答案吗? –
完成。很高兴它有帮助。 –