У меня есть абстрактный класс и его конкретная реализация класса.
Я хотел бы показать конкретный класс внутри приложения iOS (Objective-C) и использовать протоколы для отправки событий в ViewController.
Идея состоит в том, чтобы добавить целевой делегат C, который соответствует протоколу adHoc, к этому конкретному классу.
Есть идеи, как этого добиться?
К сожалению, я читал, что Objective-C ++ не может наследоваться от класса C ++.
Заранее спасибо.
Целевой класс 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
Попробуйте иметь отношения. Либо объектный объект C ++ имеет-C ++ объект или наоборот. Затем сделайте так, чтобы они знали друг друга достаточно для того, чтобы объект C ++ передавал сообщения в объект C ++.
Если вы объявили слабый указатель на id, вы можете объявить абстрактный делегат (категория в NSObject), а затем свободно вызывать методы в источнике CPP. Просто импортируйте файл, содержащий абстрактный делегат, затем реализуйте сами методы в классе ObjC, и вы получите делегат без объявления фактического делегата.