来自iOS的NSClassFromString在BlackBerry 10 SDK中是否具有同等效果?
答案 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 部分。