Я пытаюсь изменить класс C++ таким образом, что объект Objective C является одной из его переменных экземпляра.
По сути, этот вопрос похож на обратное: C++ классы как переменные экземпляра класса Objective-C
Заголовочный файл MyCPPClass.h
выглядит так:
namespace my_namespace{
class MyCPPClass: public my_namespace::OperationHandler {
public:
void someFunc();
private:
void otherFunc();
};
}
Файл MyCPPClass.mm
выглядит так:
#include "MyCPPClass.h"
#import <Foundation/Foundation.h>
void my_namespace:: MyCPPClass:: someFunc() {
NSLog(@"I can run ObjC here! Yahoo!");
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"download_url_goes_here"]];
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// handle the data
}];
}
void my_namespace:: MyCPPClass:: otherFunc() {
NSLog(@"I can run ObjC here! Yahoo!");
}
Проблема здесь в том, что мне нужно сохранить ссылку на объект, созданный в someFunc()
а затем использовать его в otherFunc()
. Этот объект является экземпляром NSURLSessionTask
. Мой опыт работы в C++ очень ограничен :( Каков наименее навязчивый способ сделать это?
Я считаю, что вы можете сохранить его как void *, в соответствии с этим передать объект Objective-C функции как указатель void *
Таким образом, ваш заголовок станет следующим:
namespace my_namespace{
class MyCPPClass: public my_namespace::OperationHandler {
public:
void someFunc();
private:
void otherFunc();
void *mySessionTask;
};
}
Если вы хотите отправить ему сообщение, вы сначала вернете его к тому, что оно должно быть:
[(NSURLSessionTask*)mySessionTask someMessageWithArg: foo]