ios — разрешить абстрактному классу C ++ использовать делегат Objective-C

У меня есть абстрактный класс и его конкретная реализация класса.
Я хотел бы показать конкретный класс внутри приложения iOS (Objective-C) и использовать протоколы для отправки событий в ViewController.

Идея состоит в том, чтобы добавить целевой делегат C, который соответствует протоколу adHoc, к этому конкретному классу.
Есть идеи, как этого добиться?

К сожалению, я читал, что Objective-C ++ не может наследоваться от класса C ++.

Заранее спасибо.

2

Решение

Целевой класс 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
1

Другие решения

Попробуйте иметь отношения. Либо объектный объект C ++ имеет-C ++ объект или наоборот. Затем сделайте так, чтобы они знали друг друга достаточно для того, чтобы объект C ++ передавал сообщения в объект C ++.

0

Если вы объявили слабый указатель на id, вы можете объявить абстрактный делегат (категория в NSObject), а затем свободно вызывать методы в источнике CPP. Просто импортируйте файл, содержащий абстрактный делегат, затем реализуйте сами методы в классе ObjC, и вы получите делегат без объявления фактического делегата.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector