構成
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 にする必要があります。