gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:09:42 24 4
gpt4 key购买 nike

我有一个字符串列表,对于其中的每一个,我想调用一个具有不同必需参数的任意函数。

示例:

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 中的信号/槽。所以我需要带有可变参数和函数指针的信号:

在发件人类中:信号:

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

关于C++ 为每个元素调用任意函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57458324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com