成员函数指针做模板参数
时间: 2024-09-24 17:18:47 浏览: 46
在C++中,可以使用成员函数指针作为模板参数来实现多态行为。这样做的目的是为了能够在运行时动态地决定调用哪个对象的成员函数。以下是一个简单的示例:
```cpp
template <typename T, typename R, typename... Args>
class Base {
public:
using MemberFnType = R (T::*)(Args...);
void bindMemberFn(MemberFnType fn, T* obj) {
memberFn_ = fn;
object_ = obj;
}
void callMemberFn(Args... args) {
(object_->*(memberFn_))(args...);
}
private:
MemberFnType memberFn_;
T* object_; // 存储对象指针
};
// 示例:
class MyClass {
public:
int add(int a, int b) { return a + b; }
};
int main() {
MyClass obj;
Base<MyClass, int, int> base;
// 绑定成员函数
base.bindMemberFn(&MyClass::add, &obj);
// 调用成员函数
base.callMemberFn(2, 3); // 动态调用obj.add(2, 3)
return 0;
}
```
在这个例子中,`Base` 类模板接受一个成员函数类型的别名 `MemberFnType` 和一个对象指针类型。`bindMemberFn` 方法用于设置要调用的成员函数和对象,`callMemberFn` 方法则通过成员函数指针动态地执行指定的成员函数。
阅读全文