c++ qt中 实现一个类的成员函数 该函数为模板函数 接受任意类型和数量的参数 以及一个函数指针
时间: 2024-09-15 19:09:23 浏览: 45
C++函数指针学习
4星 · 用户满意度95%
在Qt中实现一个类的模板成员函数,接受任意类型和数量的参数以及一个函数指针,可以这样设计:
首先,定义一个模板类和一个通用的函数指针类型,类似于C++标准库中的`std::function`。这里我们假设这个函数指针用于存储其他成员函数:
```cpp
template <typename... Args>
class MyClass {
public:
using FuncPtrType = std::function<void(Args...)>;
// 声明一个接受函数指针的成员函数,用于注册回调
template <typename Lambda>
void registerCallback(FuncPtrType callback) {
registeredCallbacks.insert(std::make_pair(callback, Lambda));
}
// 模板版本的成员函数,接收任意类型的参数
template <typename Func, typename... Args>
void callFunctionWithLambda(Func lambda, Args... args) {
static_assert(std::is_invocable<Func, Args...>::value,
"Lambda must be callable with the provided arguments");
(lambda(args...));
}
private:
QHash<FuncPtrType, LambdaType> registeredCallbacks;
};
```
接下来,你可以创建`MyClass`实例并注册函数指针,然后通过`callFunctionWithLambda`调用它们:
```cpp
// 示例:注册一个接受两个int参数的成员函数
void myMemberFunction(int a, int b) {
qDebug() << "Received: " << a << ", " << b;
}
MyClass<int, int> myObject;
myObject.registerCallback(myMemberFunction);
// 调用注册的函数,传递任意类型和数量的参数
myObject.callFunctionWithLambda(myObject.registeredCallbacks.value(myObject.myMemberFunction), 10, 20);
```
注意:在实际应用中,可能需要处理`std::bad_function_call`异常来确保函数指针指向的是有效的函数。
阅读全文