我想开发一个iPhone应用,但是我打算用C++来制作框架。在Objective-C++中是否可以使用诸如模板之类的东西?我想问题实际上是,我能否使用boost库?
我想开发一个iPhone应用,但是我打算用C++来制作框架。在Objective-C++中是否可以使用诸如模板之类的东西?我想问题实际上是,我能否使用boost库?
可以在Objective-C++中使用模板等东西,但是需要注意在纯C++层和Objective-C++代码之间混合类型和接口的方式。请记住层之间的边界,在那里您需要转换类型,例如将std::string
转换为NSString
等。
例如,您可以在纯C++中实现核心游戏引擎,只需在Objective-C++中实现控制器和GUI代码即可。然后Obj-C++代码是纯C++引擎和Cocoa之间的粘合剂。
我猜问题真正的问题是,我可以使用boost吗?
由于iPhone OS是OS X的子集,仍提供完整的POSIX层,因此大多数Boost库应该可以正常工作。这就像编写Darwin代码一样简单。
有一些需要注意的Objective-C++限制(直接摘自Objective-C 2.0参考指南):
.mm
模块中的ObjC类仍然具有相同的init
和dealloc
方法用于生命周期管理;你只是不能在同一个类中混合使用ObjC和C++方法。你不能将C++方法添加到ObjC类中,但你可以在.mm
中在两者之间调用。希望这能澄清上述内容。 - gavinbObjective C++支持全部的C++语法。使用boost库应该是可行的,但可能需要移植一些平台相关的内容。
需要指出的是,你不能在Objective-C++中像C++一样做任何事情。例如,你不能从Objective-C类调用C++对象上的虚函数。但是,一旦你调用了C/C++函数,你可以做任何你想做的事情。
Objective C++是C++的超集。在Obj-C++中,您可以做C/C++中能做的任何事情。 "Objective"部分包含了类似Smalltalk的消息传递系统和其他对C++的扩展。
在Objective C中,C++对象不一定会像在C++中那样表现。例如,构造函数和析构函数不会自动调用,并且(我认为)您无法实现虚拟方法...