C++为每个元素调用任意函数
C++ call arbitrary function for each element
>我有一个字符串列表,对于每个字符串,我想调用一个具有不同必需参数的任意函数。
例:
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中的信号/插槽。所以我需要带有可变参数和函数指针的信号:
在发件人类中: 信号:
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); });
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- C++为每个元素调用任意函数
- 使用来自C++的任意数量的参数(在编译时未知)调用 Python 函数
- 使用文件名作为字符串从任意souce .cpp文件中调用函数
- 如何在对象创建时从 QML 调用任意C++函数?
- 将具有任意参数和占位符的函数存储在类中,然后再调用它
- 推断 lambda 的调用签名或 "make_function" 的任意可调用
- 使用C++检测习惯用法计算任意可调用对象的参数
- 使用 Google C++ 模拟框架 (Google Mock) (V1.5) 将任意参数传递给调用的方法
- 折叠具有任意可调用的表达式
- 在调试c++程序期间调用round()函数时,GDB打印任意值
- 通过模板元编程用try包装任意函数调用.catch块在现代c++中
- 如何在任意随机时间退出选定的系统调用