[英]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.