我在情感上附加到我的C++類,但我真的希望它進入一個tableview。從C++類繼承NSObject
有沒有辦法從標準C++類繼承NSObject?
這就是我試圖做的:
class Model : NSObject {
public:
NSString *key;
};
編譯器不喜歡這樣一個位。
它告訴我基地說明符必須是一個類。
我能做什麼樣的偷偷摸摸的事情?
我應該把它作爲一個標準的目標C++對象嗎?
我在情感上附加到我的C++類,但我真的希望它進入一個tableview。從C++類繼承NSObject
有沒有辦法從標準C++類繼承NSObject?
這就是我試圖做的:
class Model : NSObject {
public:
NSString *key;
};
編譯器不喜歡這樣一個位。
它告訴我基地說明符必須是一個類。
我能做什麼樣的偷偷摸摸的事情?
我應該把它作爲一個標準的目標C++對象嗎?
您不能在C++和Objective-C類之間混合使用繼承。
相反,只需製作一個包裝C++對象的標準Objective-C++對象即可。教授Obj-C對象如何將所有內容傳遞給C++對象。
在MVC設計模式中,您的控制器應該管理您的模型在表格視圖中的表現方式。所以,你可以保留你的C++對象,你的TableViewController會有一個指向它的指針,而TableViewController將決定表格視圖中顯示的東西。
不,不可能。
C++和Objective-C類以非常不同的方式實現。 C++使用vtable進行函數查找,並且是靜態的。
然而,Objective-C使用動態字典查找,並且可以在運行時添加方法。
但是,你可以使用對象組合做你想做什麼:
// MyCPPClass.cpp
class MyCPPClass {
int var;
public:
void doSomething(int arg)
{
var += arg;
std::cout << "var is: " << var << std::endl;
}
};
// MyCPPWrapper.h
#ifndef __cplusplus
typedef void MyCPPClass;
#endif
@interface MyCPPWrapper : NSObject
{
@public
MyCPPClass *cppObject;
}
-(void) doSomething:(int) arg;
@end
// MyCPPWrapper.mm
@implementation MyCPPWrapper
-(void) doSomething:(int)arg
{
if (cppObject)
cppObject->doSomething(arg);
}
@end
// main.mm
int main(int argc, const char * argv[])
{
@autoreleasepool {
MyCPPWrapper *cppWrapper = [MyCPPWrapper new];
cppWrapper->cppObject = new MyCPPClass();
[cppWrapper doSomething:10];
[cppWrapper doSomething:15];
}
return 0;
}
偷偷摸摸的一個視圖模型! 我喜歡它:) – 2012-03-16 17:44:24
@PaulWand是的,它是。我希望你可以通過名稱動態地查找C++函數,這樣我就可以完全自動化,而無需用戶單獨添加函數。 – 2012-03-16 17:49:29
這是我最終做的,我剛剛得到它 ContactViewModel * con = [contacts objectAtIndex:[indexPath row]]; [cell.textLabel setText:con> contact.name]; – 2012-03-16 18:19:20
這是有道理的,這將是有點像在WPF – 2012-03-16 17:41:46