我有一个用C++编写的重要类库.我试图通过Swift中的某种类型的桥来使用它们,而不是将它们重写为Swift代码.主要动机是C++代码表示在多个平台上使用的核心库.实际上,我只是创建一个基于Swift的UI,以允许核心功能在OS X下工作.
还有其他问题,"如何从Swift调用C++函数." 这不是我的问题.要桥接到C++函数,以下工作正常:
通过"C"定义桥接头
#ifndef ImageReader_hpp
#define ImageReader_hpp
#ifdef __cplusplus
extern "C" {
#endif
const char *hexdump(char *filename);
const char *imageType(char *filename);
#ifdef __cplusplus
}
#endif
#endif /* ImageReader_hpp */
Run Code Online (Sandbox Code Playgroud)
Swift代码现在可以直接调用函数
let type = String.fromCString(imageType(filename))
let dump = String.fromCString(hexdump(filename))
Run Code Online (Sandbox Code Playgroud)
我的问题更具体.如何在Swift中实例化和操作C++类?我似乎无法找到任何关于此的内容.
是否可以在 Objective-C++ 中创建具有指向 Objective-C 接口(在文件内.h)的指针的字段的类?
为了澄清一点,我创建了一个 Objective-C 接口:
// Our platform independent class
@interface LoggerDelegate : NSObject<SomeDelegate>
@end
Run Code Online (Sandbox Code Playgroud)
我可以在文件内创建它.mm并且它可以工作,但它适用于全局变量,并且不允许我更改其范围。所以我想在里面使用它Logger.h:
class Logger {
public:
private:
LoggerDelegate* _ptr; //<--- pointer to the Objective-C interface
};
Run Code Online (Sandbox Code Playgroud)
当我在里面定义我的界面时,Logger.mm它就可以工作了。但是是否可以将 Objective-C 和 C++.h文件内的 Objective-C++ 代码合并到一起?或者只能在.mm文件中进行?