使用可变数量的参数调用QMetaObject::invokeMethod()
calling QMetaObject::invokeMethod() with variable amount of parameters
我现在正在移植FitNesse的slim服务器,我现在有点卡住了。我得到的是这样的字符串:
("id_4", "call", "id", "setNumerator", "20")
("id_5", "call", "id", "setSomethingElse", "10", "8")
其中"setNumerator"answers"setSomethingElse"是应该被调用的方法的名称," 20","10"answers"8"是我传递的参数
所以我现在的问题是,我不知道如何使用一个调用为两个方法调用invokeMethod。我当前的解决方法是这样的:
//(if instructionLength==5)
metaObj->invokeMethod(className, methodName.toAscii().constData(), Qt::DirectConnection,
Q_ARG(QVariant, instructions.at(index).at(4)))
//(if instructionLength==6)
metaObj->invokeMethod(className, methodName.toAscii().constData(), Qt::DirectConnection, Q_RETURN_ARG(QVariant, retArg),
Q_ARG(QVariant, instructions.at(index).at(4)),
Q_ARG(QVariant, instructions.at(index).at(5)))
因此,一方面,似乎每个invokememethod调用都需要非常具体的信息,这使得使用可变数量的参数很难做到这一点。另一方面,必须有一种方法,使我不必做同样的事情两次(或以后:十次)。
问题是,有没有别的方法可以用一次调用来完成?
如果你看一下函数定义,你会发现只有一个版本:
bool QMetaObject::invokeMethod ( QObject * obj, const char * member, QGenericArgument val0
= QGenericArgument( 0 ), QGenericArgument val1 = QGenericArgument(), QGenericArgument
val2 = QGenericArgument(), QGenericArgument val3 = QGenericArgument(),
QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 =
QGenericArgument(), QGenericArgument val6 = QGenericArgument(), QGenericArgument val7
= QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument
val9 = QGenericArgument() )
对于你的情况,我会这样做:
QGenericArgument argumentTable[ 10 ];
... Fill up your data
QMetaObject::invokeMethod( objet, functionName, argumentTable[ 0 ], argumentTable[ 1 ],
argumentTable[ 2 ], ... argumentTable[ 9 ] );
不使用的参数将默认初始化,这是默认行为
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- QMetaObject invokeMethod的基于函数指针的语法
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 为什么我不能调用 QMetaObject::invokeMethod(&threadObj, &QThread::start, Qt::QueuedConnection)?
- 对重载运算符调用QMetaObject
- QMetaObject::invokeMethod()在用于调用QListWidget::addItem()时返回fal
- 如果我从线程到singletone调用QMetaObject::invokeMethod,则调用仍在该qthread中
- 使用可变数量的参数调用QMetaObject::invokeMethod()