C++ QObject::连接和模板导致问题

C++ QObject::连接和模板导致问题,c++,qt,c++11,qobject,C++,Qt,C++11,Qobject,我想在基类中为QObject::connect创建一个代理。目标是将connect返回的所有QMetaObject::Connection存储在一个向量中 class MyBaseClass : public QObject { Q_OBJECT; template <typename... Args> void addConnection(Args... args) { auto c = this->connect(args...);

我想在基类中为
QObject::connect
创建一个代理。目标是将
connect
返回的所有
QMetaObject::Connection
存储在一个向量中

class MyBaseClass : public QObject {
    Q_OBJECT;

    template <typename... Args>
    void addConnection(Args... args) {
        auto c = this->connect(args...);
        if (c) {
            connections.push_back(c);
        }
    }
但这不起作用:

addConnection(this, &ClassThatInheritsBaseClass::valueChanged, [this](int v) {
    qDebug() << QString::number(value);
}
addConnection(this,&classthattheritsbaseclass::valueChanged,[this](int v){

qDebug()它是有效的代码,可用于
可变模板
std::tuple
。下面的代码是完整的工作示例:

标题:

#ifndef MYBASECLASS_H
#define MYBASECLASS_H

#include <QObject>

class MyBaseClass : public QObject {

    Q_OBJECT
    std::vector<QMetaObject::Connection> connections;
public:
    template <typename T>
    void addConnectionTuple(const T& t) {//not best
        auto c = this->connect(std::get<0>(t),std::get<1>(t),std::get<2>(t));
        if (c) {
            connections.push_back(c);
        }
    }

    template <typename... Args>
    void addConnection(Args... args) {
        auto c = this->connect(args...);
        if (c) {
            connections.push_back(c);
        }
    }
};

#endif // MYBASECLASS_H

它是有效的代码,可用于
可变模板
std::tuple
。下面的代码是完整的工作示例:

标题:

#ifndef MYBASECLASS_H
#define MYBASECLASS_H

#include <QObject>

class MyBaseClass : public QObject {

    Q_OBJECT
    std::vector<QMetaObject::Connection> connections;
public:
    template <typename T>
    void addConnectionTuple(const T& t) {//not best
        auto c = this->connect(std::get<0>(t),std::get<1>(t),std::get<2>(t));
        if (c) {
            connections.push_back(c);
        }
    }

    template <typename... Args>
    void addConnection(Args... args) {
        auto c = this->connect(args...);
        if (c) {
            connections.push_back(c);
        }
    }
};

#endif // MYBASECLASS_H

上次我检查时,Qt不支持可变模板。上次我检查时,Qt不支持可变模板。感谢您确认它可以工作:)实际上,在我的代码中,我添加了一个clearConnections()那是在某个地方调用的,所以很明显连接被删除了哈哈。我很愚蠢^^谢谢你确认它能工作:)事实上,在我的代码中,我添加了一个clearConnections(),它在某个地方被调用,所以很明显连接被删除了哈哈。我很愚蠢^^
QObject aa;
MyBaseClass bb;
std::make_tuple(10,5);
    bb.addConnectionTuple(std::make_tuple(&aa, &QObject::objectNameChanged, [](QString v) {
    qDebug() << v;
}));
aa.setObjectName("super");
QObject aa;
MyBaseClass bb;
std::make_tuple(10,5);
    bb.addConnection(&aa, &QObject::objectNameChanged, [](QString v) {
    qDebug() << v;
});
aa.setObjectName("super");
template <typename... Args>
void addConnection(Args... args) {
    auto c = this->connect(std::forward<Args>(args)...);
    if (c) {
        connections.push_back(c);
    }
}