我想从Swift中访问用C++头文件编写的enum
的值。具体来说,我在OpenCV的hpp头文件中有这个enum
,我想将它的值暴露给Swift。我试图建立斯威夫特和Objective-C之间的桥接报头,并把包装围绕C++枚举值我想揭露,但是编译器不乐意了:从Swift访问C++枚举
imgproc.hpp: C++的头文件
enum ThresholdTypes {
THRESH_BINARY = 0,
THRESH_BINARY_INV = 1,
THRESH_TRUNC = 2,
...
};
桥接报头:
#import "OpenCVWrapper.h"
OpenCVWrapper.h:我的目标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
如果我提出这个枚举声明和C++代码(OpenCV的)导入到OpenCVWrapper.mm
那么编译器就可以了吧,我也可以用它就好了,但我想将此枚举暴露给Swift,因此它必须位于头文件中。然而,当我直接在Objective-C头文件中公开C++枚举时,有些东西是不对的。
是否可以直接从Objective-C头文件访问C++常量/枚举,以这种方式可以桥接Swift?
我看过使用extern如this和this,但在我的设置中仍然无法识别C++常量。
正如在https://stackoverflow.com/questions/35229149/interacting-with-c-classes-from-swift中指出的,桥接头文件*不能处理C++。如果直接或间接通过另一个.h文件包含.hpp文件,则无关紧要。 –
从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年开始的问答。使用Google搜索“opencv c api”,我找到了一些C API文档。页面的单个类的OpenCV 3. – Scheff
@Scheff,我想避免将来可能停止工作的解决方案,但感谢您的参考。 – HuaTham