繁体   English   中英

C ++为每个元素调用任意函数

[英]C++ call arbitrary function for each element

我有一个String列表,对于每个我想调用具有不同所需参数的任意函数。

例:

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 ++:函数指向具有可变数量的参数的函数或者我用这个错误的方式?

为了使事情变得更复杂,不应该直接调用callForAll函数,而是使用Qt中的signal / slots。 所以我需要带有可变参数和函数指针的信号:

在发件人类中:信号:

template<typename F, typename ...PP >
void sigForAll(F f, PP&& ... pp);

用法:

emit sigForAll(&Receiver::method1, 5, true)

在接收器类:

 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)))

你可以使用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); });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM