与BlackBerry-10等效的NSClassFromString

时间:2013-02-05 15:00:35

标签: c++ ios blackberry-10

来自iOS的NSClassFromString在BlackBerry 10 SDK中是否具有同等效果?

2 个答案:

答案 0 :(得分:0)

您无法在C ++中本地执行此操作,C ++是一种相当静态的语言,不具备Objective-C所具有的运行时功能。如果使用模板机制将所有类名称映射到实例,则可能会有一些难以移植的情况。这在“Is there a way to instantiate objects from a string holding their class name? ”中有所描述。

对于BB10 SDK,假设它是Java,这 可能。

Class myClassName = Class.forName("ClassName");
ClassName myInstance = myClassName.newInstance();

更新: BB10 SDK是C ++,因此除了上面提到的内容之外,没有本地方法可以做到这一点。

答案 1 :(得分:0)

是的,如果您使用Qt元类型系统,则等效于NSClassFromString

您需要使用Q_DECLARE_METATYPE宏和qRegisterMetaType

class UserClass : public Superclass {
    ...
}

Q_DECLARE_METATYPE(UserClass)


int main(int argc, char *argv[]) {
    qRegisterMetaType<UserClass>("UserClass");

    ....
}

然后,您可以使用以下代码创建类的实例:

int id = QMetaType::type("UserClass");
UserClass *instance = (UserClass*)(QMetaType::construct(id));

我猜这种创建对象的方法也被QML使用,例如在 attachedObjects 部分。