我在情感上依赖于我的C ++课程,但我真的希望它能进入一个tableview。
有没有办法从标准的c ++类中继承NSObject?
这是我试图做的事情:
class Model : NSObject {
public:
NSString *key;
};
编译器不喜欢它。
它告诉我基本说明符必须是一个类。
我能做些偷偷摸摸的事吗?
我应该把它作为标准的目标C ++对象吗?
答案 0 :(得分:11)
您不能在C ++和Objective-C类之间混合继承。
相反,只需创建一个包装C ++对象的标准Objective-C ++对象。教导Obj-C对象如何将所有内容传递给C ++对象。
答案 1 :(得分:3)
不,不可能。
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;
}
答案 2 :(得分:1)
在MVC设计模式中,您的控制器应该管理模型在表视图中的表示方式。所以,你可以保留你的C ++对象,你的TableViewController将有一个指针,TableViewController将决定事物在表视图中的显示方式。