Собственно ищу типобезопасный QMetaObject::invokeMethod().
В гугле предлагают использовать костыль с QTimer:
QMetaObject::invokeMethod(obj, "doStuff", Qt::QueuedConnection);
// vs
QTimer::singleShot(0, obj, [obj](){ obj->doStuff(); });
Костыль конечно, плюс некоторые накладные расходы, но мне в целом подходит.
Вопрос в том, что хотелось бы генерировать код вида:
void MyObject::doStuff()
{
// где d в отдельном потоке
// и имена методов совпадают
QTimer::singleShot(0, d, [this](){ d->doStuff(); });
}
То есть что-то типа:
#define INVOKE() \
QTimer::singleShot(0, d, [this](){ d->__FUNCTION__(); });
Может на шаблонах можно это провернуть?