How to write objective c wrapper for c++ methods?
我需要在objective C 中为 C 类编写一个package类。
我在 Cocoa 项目中使用 C 类时参考了以下 Can\\'t find standard C includes,并且能够摆脱词法或预处理器问题:\\'vector\\' file not found 问题。
但是,我不明白将接受多个参数的 C 方法转换为objective C 方法。
有人可以帮我这样做吗?我想做的是为此 http://breakfastquay.com/rubberband/code-doc/classRubberBand_1_1RubberBandStretcher.html#a0af91755d71eecfce5781f2cd759db85
编写一个package类
我已经尝试过这样做,以下是我坚持使用的方法...
1 2 3 4 5 6 7 8 9 10 11 | // Wrapper.h #import <Foundation/Foundation.h> @interface Wrapper : NSObject { void *myRubberBandStretcher; } #pragma mark - Member Functions -(void)process:(const float)input samples:(size_t)samples final:(bool)final; @end |
/////////////////////////////////////// /////////////////////////////
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | //Wrapper.mm #import"Wrapper.h" #import"RubberBandStretcher.h" @implementation Wrapper -(id)init { self = [super init]; if (self) { myRubberBandStretcher = new RubberBand::RubberBandStretcher::RubberBandStretcher(44100, 2, 0, 1.0, 1.0); } return self; } -(void)process:(const float)input samples:(size_t)samples final:(bool)final { static_cast<RubberBand::RubberBandStretcher *>(myRubberBandStretcher)->process(<#const float *const *input#>, <#size_t samples#>, <#bool final#>) } |
您应该阅读"编译单元"。简而言之,没有办法告诉编译器用什么语言编写头文件。因此,它始终使用包含标头的源文件的语言。因此,如果您从
当然,您可能不想将所有文件都更改为 ObjC 。您用于package C 的替代方法的代码非常接近。我注意到的一件事是您的代码中仍然有
1 2 3 | -(void)process:(const float)input samples:(size_t)samples final:(bool)final { static_cast<RubberBand::RubberBandStretcher *>(myRubberBandStretcher)->process( input, samples, final ); } |
另请注意,您似乎在
顺便说一句,您还可以摆脱在任何地方都必须使用