Search code examples
c++iphoneobjective-cobjective-c++

Using an Objective-C++ file from a C++ file


I have a c++ app that I'm trying to port to iPhone and to start off I'm trying to replace my c++ texture loader with an obj-c++ texture loader so that I can make use of the cocoa libraries.

A lot of my c++ files (.cpp files) call the texture loader with something like:

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

but whenever I try to make a TextureLoader class (inside a .mm file) that has Obj-C code, I am forced to make the calling class also a .mm file.

I want to avoid a creep of .mm usage. How can I do it? Is it even possible?

Basically I have a .mm file that has...

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

and is apart of a c++ class (or is it obj-c++ at this point?)

I want to be able to use it from a .cpp file without having to make the calling class also .mm

Is there anyway to do this?

Cheers guys.


Solution

  • I'm not aware of any way to do that. However, you are not required to put all C++ member function definitions in a single file - just stick all the pure C++ stuff into .cpp, and those that need ObjC into .mm.

    As well, if you actually have the same repeated ObjC code (perhaps parametrized), then refactor it into a plain C function or C++ class in one separate .mm - such that there are no ObjC constructs in the corresponding .h - and then use that function/class where needed by including the header.