gpt4 book ai didi

c++ - 如何从 QObject* 转换为 QGenericArgument 递归 QMetaObject::newInstance(...)

转载 作者:行者123 更新时间:2023-11-30 01:58:38 25 4
gpt4 key购买 nike

我正在使用 Qt MetaObject 系统进行 DI IoC 开发。

class Resolver
{
public:
template <typename BaseType, typename DerivedType>
void Bind() { ... }

template <typename T>
T* Resolve() { ... }
...

private:
QObject* ResolveByName(QString typeName) { ... }
QHash<QString, QMetaObject> _container;
...
}

Bind 方法将有关类型的信息存储在_container 中,而Resolve 方法使用此信息来创建实例。我正在使用 QMetaObject::newInstance(QGenericArgumet arg1, QGenericArgumet arg2, ...) 和递归构造函数参数解析。例如我们有这样的类:

class IUserService { ... }

class NativeUserService : public IUserService
{
NativeUserService(IUserRepository* userRepository) { ... }
}

客户端调用后:

IUserService* userService = resolver.Resolve<IUserService>();

Resolver calls ResolveByName("IUserService*"):

QObject* ResolveByName(Qstring typeName)
{
QMetaObject meta = _container.value(typeName);
...
for (quint8 index = 0; index < 10; index++)
{
...
QString argType = constructorType.parameterTypes().at(index);
QObject *argValue = ResolveByName(argType);
ctorArgs << QGenericArgument(???);
}
...
return meta.newInstance(ctorArgs[0], ctorArgs[1], ...);
}

问题:如何将 meta.newInstance() 结果传递给 meta.newInstance() 参数(从 QObject* 转换为 QGenericArgument)?

最佳答案

你不应该直接使用 QGenericArgument。有 Q_ARG

Q_ARG(QObject*, object)

关于c++ - 如何从 QObject* 转换为 QGenericArgument 递归 QMetaObject::newInstance(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17134032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com