構成
SubView.h (呼ばれる側のヘッダファイル)// C++ から呼ばれるクラスを宣言する class SubView { public: // C++ から呼ばれる関数 static void callObjC(); };
SubView.mm (呼ばれる側のソースファイル)
#import "SubView.h" // ヘッダファイルではなく、ソースファイルで Objective-C クラスを宣言する @interface ClassObjC : NSObject + (void)testingMethod; @end // 通常通りソースファイルで Objective-C クラスを実装する @implementation ClassObjC //-------------------------------------------------- // [Objective-C] テスト用 //-------------------------------------------------- + (void)testingMethod { NSLog(@"C++ から呼ばれました。"); } @end //================================================== // [C++] Objective-C クラスのメソッドを呼ぶ //================================================== void SubView::callObjC() { [ClassObjC testingMethod]; }
MainView.cpp (呼ぶ側)
#include "SubView.h" void MainView::mainFunc() { SubView::callObjC(); }
要説
Objective-C ファイルに C++ 用の入り口を付けるイメージです。処理順はこのようになります。
- MainView::mainFunc()
- SubView::callObjC()
- [ClassObjC testingMethod]
例えば元々 Objective-C ファイルがある場合、クラスの宣言をソースファイルに移し、呼び出し用の C++ コードを付け足すだけで要件を満たせます。 ただし、そのソースファイルは C++ と Objective-C を含むので、拡張子を .mm にする必要があります。