// C++ 泛型编程示例:使用模板实现一个简单的泛型函数
#include <iostream>
#include <type_traits>
// 定义一个泛型函数,可以接受任意类型的参数并返回其值
template <typename T>
T identity(T value) {
return value;
}
// 定义一个泛型函数,可以接受两个任意类型的参数并返回它们的和
// 仅当这两个类型支持加法运算时才有效
template <typename T, typename U,
typename std::enable_if<std::is_arithmetic<T>::value && std::is_arithmetic<U>::value, int>::type = 0>
auto add(T a, U b) -> decltype(a + b) {
return a + b;
}
int main() {
// 使用 identity 函数
int x = identity(42);
double y = identity(3.14);
std::string z = identity("Hello, World");
std::cout << "identity(42) = " << x << std::endl;
std::cout << "identity(3.14) = " << y << std::endl;
std::cout << "identity(\"Hello, World\") = " << z << std::endl;
// 使用 add 函数
int sum1 = add(5, 7);
double sum2 = add(3.14, 2.86);
std::cout << "add(5, 7) = " << sum1 << std::endl;
std::cout << "add(3.14, 2.86) = " << sum2 << std::endl;
// 下面这行代码会导致编译错误,因为 std::string 不支持加法运算
// std::string result = add("Hello", "World");
return 0;
}
模板函数 identity
:
template <typename T>
,我们告诉编译器这个函数可以处理任何类型的数据。模板函数 add
:
std::enable_if
和 std::is_arithmetic
是标准库中的工具,用于在编译时进行类型检查。主函数 main
:
std::string
)调用 add
函数会导致编译错误,这正是我们期望的行为。上一篇:vc++runtime
下一篇:c++ 重载运算符
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站