#include <iostream>
// 模板类定义
template <typename T>
class FunctionHolder {
public:
// 成员函数指针类型的成员变量
void (*func)(T);
// 构造函数,初始化函数指针
FunctionHolder(void (*f)(T)) : func(f) {}
// 调用函数指针
void execute(T data) {
if (func) {
func(data);
}
}
};
// 不同类型的处理函数
void processInt(int num) {
std::cout << "Processing integer: " << num << std::endl;
}
void processDouble(double num) {
std::cout << "Processing double: " << num << std::endl;
}
// 以多态的方式调用函数的函数
template <typename T>
void callFunction(FunctionHolder<T>& holder, T data) {
holder.execute(data);
}
int main() {
// 实例化不同类型参数的模板类对象
FunctionHolder<int> intHolder(processInt);
FunctionHolder<double> doubleHolder(processDouble);
// 调用函数展示多态行为
callFunction(intHolder, 42);
callFunction(doubleHolder, 3.14);
return 0;
}
- 模板类
FunctionHolder
:
- 包含一个成员函数指针
func
,它可以指向一个接受类型为 T
参数并返回 void
的函数。
- 构造函数用于初始化这个函数指针。
execute
成员函数调用存储的函数指针(如果它不为空)。
- 处理函数:
processInt
用于处理 int
类型的数据。
processDouble
用于处理 double
类型的数据。
callFunction
函数:
- 这是一个模板函数,接受一个
FunctionHolder<T>
对象和类型为 T
的数据,通过调用 holder.execute(data)
以多态的方式调用不同的函数来处理数据。
main
函数:
- 实例化了
FunctionHolder<int>
和 FunctionHolder<double>
对象,并分别传入对应的处理函数。
- 调用
callFunction
函数来展示多态行为,分别处理 int
和 double
类型的数据。