SwiftからC++ヘッダーで書かれたenum
の値にアクセスしようとしています。具体的には、OpenCVのhppヘッダーファイルにenum
という値を設定して、その値をSwiftに公開したいとします。私はスウィフトとObjective-Cの間のブリッジのヘッダーを設定し、私は公開したいC++のenum値の周りにラッパーを置くことを試みてきたが、コンパイラはそれについて満足していないです:SwiftからC++ Enumにアクセス
imgproc.hpp: C++ヘッダファイル
enum ThresholdTypes {
THRESH_BINARY = 0,
THRESH_BINARY_INV = 1,
THRESH_TRUNC = 2,
...
};
ブリッジヘッダ:
#import "OpenCVWrapper.h"
OpenCVWrapper.h:私のObjective-C WRA PPERクラスはスウィフト
#ifdef __cplusplus
#import <opencv2/core.hpp>
#import <opencv2/imgproc.hpp>
#endif
#import <Foundation/Foundation.h>
@interface OpenCVWrapper : NSObject
typedef enum {
Binary = cv::THRESH_BINARY, // ERROR: use of undeclared identifier `cv`
BinaryInv = cv::THRESH_BINARY_INV // ERROR: use of undeclared identifier `cv`
} ThresholdingType;
...
@end
にさらされる私はOpenCVWrapper.mm
にこの列挙宣言とC++コード(OpenCVの)輸入を移動した場合、コンパイラはそれでOKですが、私もちゃんとそれを使用することができますが、私はしたいですこの列挙型をSwiftに公開してヘッダファイルに入れなければなりません。しかし、C++のenumをObjective-Cヘッダーに直接公開すると、何か問題があります。
Objective-CヘッダからC++の定数/列挙型に直接アクセスして、Swiftと橋渡しすることは可能ですか?
私はexternをthisとthisのように見ましたが、C++定数はまだ私のセットアップで認識されません。
https://stackoverflow.com/questions/35229149/interacting-with-c-classes-from-swiftで指摘されているように、ブリッジヘッダーファイル*はC++を処理できません。 .hppファイルを直接または間接的に別の.hファイルに含めるかどうかは関係ありません。 –
CからSwiftに至るのは簡単でしょうか? OpenCV 2には、[OpenCV用のC API](http://docs.opencv.org/2.4/modules/core/doc/old_basic_structures.html)がありました。残念ながら、OpenCV 3のメンテナンスは廃止されたようだ:[openCVはまもなくC APIサポートを失うだろう](http://answers.opencv.org/question/17546/opencv-will-drop-c-api-support-soon/ )。これは2013年からのQ&Aです。「opencv c api」の検索で、C APIのドキュメントが見つかりました。 OpenCV 3の個々のクラスのページを参照してください。 – Scheff
@Scheff、将来的には機能しなくなる可能性のある解決策を避けたいと思いますが、参照していただきありがとうございます。 – HuaTham