簡體   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