gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:26:01 28 4
gpt4 key购买 nike

我正在尝试以 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++ 背景非常有限:(。执行此操作的侵入性最小的方法是什么?

最佳答案

我相信您可以根据此 Pass an Objective-C object to a function as a void * pointer 将其存储为 void*

所以你的标题会变成:

namespace my_namespace{

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

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

如果你想向它发送一条消息,你首先要将它转换回它应该是的样子:

[(NSURLSessionTask*)mySessionTask someMessageWithArg: foo]

关于c++ - Objective C 对象作为 C++ 类中的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38016909/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com