Objective C对象作为c++类中的实例变量

Objective C objects as instance variables in C++ classes

本文关键字:实例 变量 c++ 对象 Objective      更新时间:2023-10-16

我正在尝试修改一个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]