1

iOS 的NSClassFromString是否在 BlackBerry 10 SDK 中具有等效项?

4

2 回答 2

0

你不能在 C++ 中原生地做到这一点,C++ 是一种相当静态的语言,它没有 Objective-C 所具有的运行时功能。如果您使用模板机制将所有类名称映射到实例,则可以通过一些硬移植来实现。这在“ Is there a way to instantiate objects from a string contains their class name? ”中有所描述。

至于BB10 SDK,基于它是Java的假设,这可能的。

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

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

于 2013-02-05T15:49:13.460 回答
0

NSClassFromString是的,只要您使用 Qt 元类型系统,就有一个等价物。

您需要使用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 使用,例如在attachObjects部分。

于 2013-02-09T12:47:13.930 回答