MST

星途 面试题库

面试题:C++ 函数指针与模板结合的深度应用

编写一个通用的 `applyOperation` 模板函数,它接受一个函数指针和两个不同类型的参数,根据函数指针所指向的函数对这两个参数进行操作并返回结果。例如,函数指针指向一个加法函数,传入一个 `int` 类型和一个 `double` 类型参数,返回它们相加的结果。同时要处理不同类型参数运算时可能出现的类型转换问题,确保代码的正确性和健壮性。请详细说明设计思路并完成代码编写。
45.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 模板函数定义:使用模板来处理不同类型的参数,使得函数可以接受各种类型组合。
  2. 类型转换:在函数内部,根据具体的操作,需要对参数进行适当的类型转换,以确保运算的正确性。例如,如果是加法操作,将较小精度的类型转换为较大精度的类型。
  3. 函数指针参数:接受一个函数指针作为参数,该函数指针指向要执行的具体操作函数。

代码实现

#include <iostream>

// 示例操作函数:加法
template<typename T1, typename T2>
auto add(T1 a, T2 b) {
    return a + b;
}

// 通用的applyOperation模板函数
template<typename Func, typename T1, typename T2>
auto applyOperation(Func func, T1 a, T2 b) {
    return func(a, b);
}

int main() {
    auto result = applyOperation(add, 5, 3.14);
    std::cout << "结果: " << result << std::endl;
    return 0;
}

在上述代码中:

  • add 函数是一个示例操作函数,用于执行加法运算,它也是模板函数以支持不同类型的参数。
  • applyOperation 模板函数接受一个函数指针 func 和两个不同类型的参数 ab,然后调用 funcab 进行操作并返回结果。
  • main 函数中,演示了如何调用 applyOperation 函数并传入 add 函数指针以及 intdouble 类型的参数。