C文件可以从.c修改为.m文件,也可以从其他目标C文件(.m文件)调用。
C++文件可以从.cpp修改为.mm文件,也可以从其他目标C++文件(.mm文件)调用。
.m文件可以从.mm文件中调用。但是不能从.mm文件调用.m文件。
目标C++编码在iPhone开发中是必要的,就像目标C中的UI一样,而实现的任何其他协议都不能是目标C++,因为这个(编写的协议)将从目标C的UI中调用。
在什么情况下使用了这种客观的C++编码?
发布于 2011-05-09 13:59:31
.m文件可以从.mm文件中调用。但是不能从.mm文件调用.m文件。
我不知道你这么说是什么意思,但我觉得这是错的。
目标C(++)的“客观”部分在两种语言中是相同的。不管实现是目标C还是目标C++,对象都是完全可互操作的。
重要的是在其中声明接口的头文件。例如:
@interface Foo
{
CPPFoo myFoo; // A C++ object
}
@end不能包含在正常的目标- C .m文件中,因为C++类在C中是非法的。
#if defined __cplusplus
class CPPFoo;
#else
typedef struct CPPFoo CPPFoo;
#endif
@interface Foo
{
CPPFoo *myFoo; // NOTE: a pointer to a C++ object
}
@end您需要在-init中新建指针并在-dealloc/-finalize中删除它。
是iPhone开发中必需的客观C++编码。
不是的。我曾经认为(来自C++背景)最好在UI中随时随地使用C++和Objective。然而,我没过多久就意识到,object的对象模型比C++更好。因此,现在我只考虑两种情况下的C++:
如果性能很重要,并且需要内置对象模型(即不想使用纯C),则
发布于 2011-05-07 14:00:44
目标- C++用于任何时候你想要混合目标-C代码和C++代码.
您关于“不能从.mm文件中调用.m文件”的说法是不正确的。如果将C++放入标头中,则不能从纯Objective文件调用它,但对于具有使用C++的实现的类,可以有一个纯Objective接口。一个常见的例子是将现有的C++类(可能是一些现有的库)包装为Objective类。
https://stackoverflow.com/questions/5920855
复制相似问题