gpt4 book ai didi

c++ - 如何在 Objective C++ header 中包含 C++ header ?

转载 作者:技术小花猫 更新时间:2023-10-29 10:44:45 28 4
gpt4 key购买 nike

我有一个 .cpp/.hpp 文件组合 -> .hpp 文件有#include ..

我还有一个 .mm/.h 文件组合 -> 如果我在我的 .mm Objective C++ 文件中包含 .hpp 文件,则没有问题。但是,如果我尝试将 .hpp 文件包含在我的 .h(Objective C header )文件中,我会收到预处理器问题“未找到 iostream”。

除了做一些时髦的事情,比如在我的 Objective C .h 文件中有一个 void* 然后将其转换为包含在 .mm 中的类型,或者将每个 C++ 类型包装在一个 Objective C++ 类型中,有什么办法可以解决这个问题?

我的问题和Tony的问题基本一样(但是没人回答他):

https://stackoverflow.com/questions/10163322/how-to-include-c-header-file-in-objective-c-header-file

最佳答案

问题是您必须避免 header 中的所有 C++ 语义,以允许普通的 Objective-C 类包含它。这可以使用 opaque pointers 来完成.

CPP类.h

class CPPClass
{
public:
int getNumber()
{
return 10;
}
};

对象CPP.h

//Forward declare struct
struct CPPMembers;

@interface ObjCPP : NSObject
{
//opaque pointer to store cpp members
struct CPPMembers *_cppMembers;
}

@end

ObjCPP.mm

#import "ObjCPP.h"
#import "CPPClass.h"

struct CPPMembers {
CPPClass member1;
};

@implementation ObjCPP

- (id)init
{
self = [super init];
if (self) {
//Allocate storage for members
_cppMembers = new CPPMembers;

//usage
NSLog(@"%d", _cppMembers->member1.getNumber());
}

return self;
}

- (void)dealloc
{
//Free members even if ARC.
delete _cppMembers;

//If not ARC uncomment the following line
//[super dealloc];
}

@end

关于c++ - 如何在 Objective C++ header 中包含 C++ header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13691539/

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