#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;
}