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

时间:2016-06-24 15:24:15

标签: c++ ios objective-c class objective-c++

我试图以一种Objective C对象是其实例变量之一的方式修改C ++类。

实质上,这个问题与此相反:C++ classes as instance variables of an Objective-C class

标题文件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 ++中的背景是非常有限的:(。什么是最不具侵入性的方法呢?

1 个答案:

答案 0 :(得分:1)

根据Pass an Objective-C object to a function as a void * pointer

,我相信你可以将它存储为空*

所以你的标题会变成:

namespace my_namespace{

    class MyCPPClass: public my_namespace::OperationHandler {
        public:
            void someFunc();

        private:
            void otherFunc();
            void *mySessionTask;
    };
}

如果您想向其发送消息,请先将其转换回原来的内容:

[(NSURLSessionTask*)mySessionTask someMessageWithArg: foo]