是否可以创建可变参数信号并将通用 lambda连接为slot?我的意思是这样的(比如说,所涉及函数的所有定义在需要的地方都是可见的(例如在实例化点)):
#include <QCoreApplication>
#include <QObject>
#include <QTime>
class A
: public QObject
{
Q_OBJECT
public :
A(QObject * const parent = Q_NULLPTR)
: QObject{parent}
{ ; }
signals :
template< typename ...Ts >
void infoMessage(Ts... args);
public slots :
void run()
{
emit infoMessage("Started at ", QTime::currentTime());
}
};
#include <QTimer>
#include <QtDebug>
#include "main.moc"
int main(int argc, char * argv [])
{
QCoreApplication a{argc, argv};
A a;
auto printInfoMessage = [&] (auto... args)
{
(qInfo() << ... << args);
};
QObject::connect(&a, SIGNAL(infoMessage), printInfoMessage);
QTimer::singleShot(0, &a, &A::run);
return a.exec();
}
目前它给出了一条错误消息:
AUTOGEN:错误:main.cpp 的进程:18:错误:模板函数作为信号或槽
moc失败了...
这里宏SLOT()
而不是&A::infoMessage
没有太大帮助。是否有任何解决方法可以克服此限制?
我知道,其中一些答案将包含使用 ofstd::make_tuple
和std::index_sequence
东西。但是有没有那么冗长的解决方案?