模板成员函数指针保存
时间: 2024-09-24 17:22:08 浏览: 34
c++ 成员函数指针
在C++中,模板成员函数指针用于存储与特定模板实例相关的类成员函数。模板函数允许编写通用代码,可以适应多种类型。当涉及到存储这些函数时,模板成员函数指针(如`std::function`)提供了一种方式来封装这种灵活性。
`std::function`模板可以用来存储任何可调用的对象,包括成员函数。它会自动调整大小以匹配所传递的函数类型,使得我们可以创建一个可以动态绑定到不同类型的成员函数的指针。例如:
```cpp
template<typename T>
class MyClass {
public:
void (T::*myMethod)(int); // 声明一个成员函数指针
std::function<void(MyClass<T>*, int)> functionPtr; // 定义一个std::function
void setFunction(T* obj) {
functionPtr = &MyClass<T>::myMethod; // 设置指向成员函数的指针
}
void callMethod(int arg) {
(obj->*functionPtr)(arg); // 使用std::function调用成员函数
}
};
// 实例化并使用
MyClass<int> myIntObj;
void (MyClass<int>::*)(int) method = &MyClass<int>::myMethod;
myIntObj.setFunction(&myIntObj);
myIntObj.callMethod(10); // 调用myMethod(10)
```
在这里,`setFunction`方法设置了一个`std::function`指向`MyClass<T>`的`myMethod`,这样`callMethod`可以在运行时决定调用哪个具体的成员函数。
阅读全文