1

我有一个 c++ 应用程序,我正在尝试移植到 iPhone 并开始尝试用 obj-c++ 纹理加载器替换我的 c++ 纹理加载器,以便我可以使用可可库。

我的很多 c++ 文件(.cpp 文件)调用纹理加载器,例如:

GLuint mTexture = TextureLoader::LoadTexture("file.png") //LoadTexture is a static method`

但是每当我尝试创建一个具有 Obj-C 代码的 TextureLoader 类(在 .mm 文件中)时,我不得不将调用类也设为 .mm 文件。

我想避免使用 .mm 的蠕变。我该怎么做?甚至可能吗?

基本上我有一个 .mm 文件...

GLuint TextureLoader::LoadTexture(const char* path)
{
   //...lots of c and obj-c code
   return texture
}

并且是 c++ 类的一部分(或者此时它是 obj-c++ 吗?)

我希望能够从 .cpp 文件中使用它,而不必将调用类也设为 .mm

有没有办法做到这一点?

干杯,伙计们。

4

5 回答 5

4

我想避免使用 .mm 的蠕变。我该怎么做?甚至可能吗?

如果您想使用 Objective-C++,则不是。

于 2009-08-15T07:13:05.410 回答
1

最简单的做法就是将所有内容编译为 Objective-C++。您不必更改所有扩展名;将它们保留为.cpp并将 Xcode 设置为将所有内容编译为 Objective-C++:在项目的构建设置下,在“GCC XX - Language”类别中,将“Compile Sources As”更改为“Objective-C++”。

(我假设您的问题是您有一大堆.cpp文件,并且您不想将它们全部重命名为.mm. 编译为 Objective-C++ 对那些实际上不使用任何 Objective-C 东西的文件没有影响(只有非常罕见的例外),它会让你的生活更轻松。)

于 2009-08-15T07:48:36.993 回答
0

我不知道有什么方法可以做到这一点。但是,您不需要将所有 C++ 成员函数定义放在一个文件中 - 只需将所有纯 C++ 内容.cpp粘贴到.mm.

同样,如果您实际上有相同的重复 ObjC 代码(可能是参数化的),那么将其重构为一个单独的普通 C 函数或 C++ 类.mm- 这样相应的就没有 ObjC 构造.h- 然后使用该函数/类在需要时包含标题。

于 2009-08-15T07:01:47.400 回答
0

在 XCode 中,右键单击您的.cpp文件并选择“获取信息”。在“常规”选项卡中,将文件类型更改为sourcecode.cpp.objcpp. 这将构建此文件,并且仅将此文件构建为 Objective C++。

于 2011-03-06T22:16:43.733 回答
0

不确定所涉及代码的大小,但如果它有一个非常小的接口,您可以为您的 C++ 代码编写一个 C 包装器,然后extern C { /* ... */ }在头文件声明和函数定义周围使用。

这实质上将“隐藏”来自 Objective-C 的 C++ 调用,并允许您规避将文件从扩展名重命名mmm扩展名的要求,和/或将调用文件编译为 Objective-C++ 的要求。

Objective-C++ 使用不同的编译器规则并且比标准的 Objective-C 编译要慢。

于 2012-12-17T20:04:22.840 回答