MST

星途 面试题库

面试题:C++函数模板的重载与特化

假设有一个函数模板template <typename T> T add(T a, T b),它返回两个相同类型参数的和。现在要求你重载这个函数模板,使其能够处理一个整数和一个浮点数相加的情况;同时,对该函数模板进行特化,针对复数类型(假设已有复数类Complex),实现复数相加并返回结果。请写出完整代码。
25.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

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

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

// 重载函数模板,处理一个整数和一个浮点数相加的情况
template <typename T1, typename T2>
auto add(T1 a, T2 b) -> decltype(a + b) {
    return a + b;
}

// 函数模板特化,针对复数类型
template <>
std::complex<double> add<std::complex<double>>(std::complex<double> a, std::complex<double> b) {
    return a + b;
}

int main() {
    int i = 5;
    double d = 3.5;
    std::complex<double> c1(1, 2);
    std::complex<double> c2(3, 4);

    std::cout << "int + double: " << add(i, d) << std::endl;
    std::cout << "complex + complex: " << add(c1, c2) << std::endl;

    return 0;
}