Я портирую Slim-сервер FitNesse в данный момент, и я как бы застрял прямо сейчас.
Что я получаю, так это строки:
("id_4", "call", "id", "setNumerator", "20")
("id_5", "call", "id", "setSomethingElse", "10", "8")
Где "setNumerator" и "setSomethingElse" - это имена методов, которые должны быть вызваны, а "20", "10" и "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)))
и так далее ...
Таким образом, с одной стороны, кажется, что каждый вызов invokeMethod нуждается в очень конкретной информации, что затрудняет выполнение этого с переменным количеством аргументов. С другой стороны, должен быть способ, чтобы мне не приходилось делать одно и то же дважды (или позже: десять) раз.
Итак, вопрос в том, есть ли другой способ сделать это одним вызовом?