
目前,我正在使用它.
// A.h,Objective-C#import "B.h"@interface A{ B* b;}@end// B.h,Objective-C++@interface B{ voID* c;}// C.h,C++class C{}; 我想把C.h包括在B.h中,但如果我这样做,那么B.h就不能被导入A.h.所以我必须将变量c保留为voID *类型.这不是一个大问题,因为我可以自由地使用B.m文件中的C成员.但我总是要施展它.这感觉不清楚.所以我想用更好的方法.
解决方法 有几种方法可以做到这一点,但在我看来,最好的方法是使用 ‘PIMPL’ idiom,这在C中很常见.使标头纯粹是Objective-C和纯C,带有指向包含实际实现的前向声明结构的指针.这是在.mm文件中定义的,然后可以使用Objective-C.在您的示例中,您将执行以下 *** 作:
// B.h,pure Objective-C:struct BImpl;@interface B{ struct BImpl* impl;}// ...// B.mm,mixed:#include "C.h"struct BImpl // since this is C++,it can actually have constructors/destructors{ C* my_c; BImpl() : my_c(new C) {} ~BImpl() { delete my_c; my_c = NulL; }};// make sure to alloc/initialise impl (using new) in B's init* methods,// and free it (using delete) in the dealloc method. 我实际上写了一篇关于解决这个问题的文章,你可能会发现它很有用:http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-projects – 它还展示了其他一些方法,包括你原来的voID *方法.
总结以上是内存溢出为你收集整理的建议使用Objective-C类的C类最小化使用Objective-C?全部内容,希望文章能够帮你解决建议使用Objective-C类的C类最小化使用Objective-C?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)