我有一个字符串列表,对于每个字符串,我想调用一个带有不同所需参数的任意函数。
示例:
void method1(QString name, int foo1){}
void method2(QString name, int foo2, bool flag(){}
QStringList list;
list << "ELEM1" << "ELEM2";现在我想要一个函数,我可以将任何函数传递给它,并使用列表中每个元素的给定值调用它
void callForAll((MyClass::*pt2ConstMember)(QString,X,X)){
    foreach(QString element, list){
        (*m_class.*pt2ConstMember)(element,X,X);
    }
}
callForAll(&MyClass::method1, 4);
callForAll(&MyClass::method2, 6, false)它的核心看起来像是我想做这样的事情:C++: Function pointer to functions with variable number of arguments,还是我走错了路?
让事情变得更复杂的是,不应该直接调用callForAll函数,而是使用Qt中的信号/槽。所以我需要带可变参数和函数指针的信号:
在发送者类中: Signal:
template<typename F, typename ...PP >
void sigForAll(F f, PP&& ... pp);用法:
emit sigForAll(&Receiver::method1, 5, true)在receiver类中:
 template<typename F, typename ...PP >
 void ForAll(F f, PP&& ... pp);在包含发送者和接收者类的成员实例的第三个类中:
 connect(m_sender, SIGNAL(sigForAll(F f, PP&& ... pp)), m_receiver, SLOT(ForAll(F f, PP&& ... pp)))发布于 2019-08-12 17:17:25
您可以使用lambda。它将比指针指向成员的解决方案得到更好的优化:
template <typename F>
void callForAll(F const& f) {
    foreach(QString element, list) {
        f(element);
    }
}
callForAll([&m_class](QString const& s){ m_class.method1(s, 4); });
callForAll([&m_class](QString const& s){ m_class.method2(s, 6, false); });https://stackoverflow.com/questions/57458324
复制相似问题