MST

星途 面试题库

面试题:C++可变参数模板在泛型编程中的复杂应用

设计一个C++的泛型数学计算库,使用可变参数模板实现一个函数,它可以接收不同类型的数值参数(如int, float, double等),并根据传入参数的类型动态选择合适的计算方法(如加法、乘法等)进行运算,最后返回计算结果。要求考虑类型兼容性和精度问题。
29.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <type_traits>

// 加法函数模板
template <typename T>
T add(T a, T b) {
    return a + b;
}

// 乘法函数模板
template <typename T>
T multiply(T a, T b) {
    return a * b;
}

// 类型判断及计算函数模板
template <typename T, typename... Args>
auto calculate(T first, Args... rest) -> decltype(add(first, calculate(rest...))) {
    return add(first, calculate(rest...));
}

template <typename T>
auto calculate(T last) -> T {
    return last;
}

// 主函数
int main() {
    std::cout << "计算结果: " << calculate(1, 2.5, 3.0f) << std::endl;
    return 0;
}

上述代码解释:

  1. 加法和乘法函数模板:定义了addmultiply函数模板,用于实现加法和乘法运算。
  2. 类型判断及计算函数模板calculate函数模板使用可变参数模板,递归调用自身并结合add函数进行计算,同时利用decltype推导返回值类型。终止条件是当只有一个参数时,直接返回该参数。
  3. 主函数:调用calculate函数进行计算,并输出结果。在实际应用中,可以根据需求进一步完善类型兼容性和精度处理,例如添加类型转换逻辑以确保精度损失最小化等。