私が取り組んでいるマルチプラットフォーム アプリは、実行中のプラットフォームに応じて、単一の C++ クラスの異なるサブクラスを使用します。スーパークラスを変更せずに、OS X サブクラスを Objective-C++ (.mm) ファイルにすることはできますか?
編集:詳細
現在のプロジェクトには、次のファイル階層が含まれています。
* VideoDriver.cpp - (superclass)
- VideoDriver_OSX.cpp - (subclass, contains Mac implementation)
- VideoDriver_win.cpp - (subclass, contains Windows implementation)
- VideoDriver_X11.cpp - (subclass, contains Linux implementation)
つまり、Core Animation やその他の Cocoa ライブラリを VideoDriver_OSX 実装で使用できるようにしたいと考えています。これを Objective-C++ ファイル (VideoDriver_OSX.mm) に変更すると、これらの Cocoa ライブラリを使用できるようになりますが、VideoDriver_OSX オブジェクトをインスタンス化しようとするコード行 (別のファイル内) により、実行時に次の動的リンカー エラーが発生します。
dyld: lazy symbol binding failed: Symbol not found: __ZN15VideoDriver_OSXC1EP10gui_info_sP6CPFifoI17DecodedVideoFrameE
これは C++ の名前マングリングに関連しているようですが、解決方法がわかりません。皆さん、助けてくれて本当に感謝しています。