iPhone项目中的c ++模板

时间:2010-02-17 19:37:32

标签: c++ iphone objective-c templates

我正在将项目移植到iPhone系统,我遇到了以下问题: 我有一个包含c ++模板的标题 如果我将它重命名为.mm,它不会编译(因为它应该是一个标题),如果我保持为.h,它被解释为一个客观的C标题

您有解决此问题的解决方法吗?

提前致谢!

此致

编辑:添加错误消息和代码

template <typename T>
class CML_Matrix
{
public:
//rest of teh template
};

错误消息是“无法找到typename的协议声明”

3 个答案:

答案 0 :(得分:5)

将其包裹在

#ifdef __cplusplus
//templates here
#endif

这样,当文件包含在C或Objective C(.m)源中时,模板将被静默忽略。

你也可以在

中包含一些Objective C-only构造
#ifdef __OBJC__

编辑:您也可以将源(不是标题!)重命名为.mm。由于它是一个混合的ObjC / C ++项目,你可能必须在某个时候实例化/调用C ++类;为此,无论如何你都需要Objective C ++。但是从来没有试过这个。

答案 1 :(得分:4)

确保将包含C ++标头的文件编译为C ++或Objective-C ++。 Objective-C文件(扩展名为.m)无法成功编译C ++。将其扩展名更改为.mm可以解决您的问题。

答案 2 :(得分:2)

将其重命名为.hpp

(标题必须是#include d .cpp.mm文件。标题的扩展名除了向IDE提示其使用的语言外什么都没有。)