2013-04-29 25 views
0

我有這樣的事情:如何在ANSI-C++中實現UIView方法?

// main.m 
@interface MYView : UIView { @public int counter; } @end; 
@implementation MYView 
- (void)drawRect:(CGRect)rect { 
} 
@end 

現在我想在這裏移除實現的drawRect方法(或任何其他方法),並將其移動到C++文件utility.cpp。

我需要這個的原因是我必須使用一些C++庫,它不會在Objective-C++中編譯。我需要密集使用該庫,以便來回切換不方便。

我知道我能simly做到這一點:

- (void)drawRect:(CGRect)rect { 
    call_cpp_function(rect); 
} 

但也許我可以在C只是完全定義方法++?類似這樣的:

void __magic_declaration__ MYView::drawRect(CPPTYPE(CGRect)) 
// note, this line is completely my own imagination, this is just to illustrate what I want. 
+0

我很抱歉問,但您爲什麼要這麼做? – 2013-04-29 08:37:28

+0

我需要這個的原因是我必須使用一些C++庫,它不會在Objective-C++中編譯。 – exebook 2013-04-29 08:37:58

+0

對不起,我從你的問題中得到了答案。你爲什麼用C++代碼繪圖(或者只畫一個簡單的例子)? – 2013-04-29 08:40:00

回答

3

這可能,如果不完全是你稱之爲愉快的。請參閱this answer,其中構建了一個視圖並以純C繪製。

+0

嘿,看,這是我的答案!你打敗了我,哈哈。 – 2013-04-30 03:31:24

+0

是的,我知道這是你的。你現在深入世界聞名) – exebook 2013-04-30 03:37:13

2

你不能這樣做。你可以得到最接近的是從你提到的ObjC方法調用C++代碼。

從技術上講,您可能會破解一些使用ObjC運行時API動態添加方法的東西,但這會變得越來越笨重,越來越慢,越來越慢。