Объектные объекты C как переменные экземпляра в классах C ++

1

Я пытаюсь изменить класс 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++ очень ограничен :( Каков наименее навязчивый способ сделать это?

Теги:
class
objective-c++

1 ответ

1
Лучший ответ

Я считаю, что вы можете сохранить его как 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]
  • 0
    Но тогда вы теряете управление памятью переменной, которая основана на типе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню