Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ 泛型

作者:ˉ吻干迩的'泪   发布日期:2025-10-10   浏览:90

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

解释说明:

  1. 模板函数 identity:

    • 这是一个非常简单的泛型函数,它接受一个任意类型的参数并返回该参数。通过 template <typename T>,我们告诉编译器这个函数可以处理任何类型的数据。
  2. 模板函数 add:

    • 这个函数展示了如何使用 SFINAE(Substitution Failure Is Not An Error)技术来限制模板函数的适用范围。只有当传入的参数类型是算术类型(如整数、浮点数等)并且支持加法运算时,编译器才会生成相应的函数实例。
    • std::enable_ifstd::is_arithmetic 是标准库中的工具,用于在编译时进行类型检查。
  3. 主函数 main:

    • 演示了如何调用上述泛型函数,并输出结果。
    • 尝试对不支持加法运算的类型(如 std::string)调用 add 函数会导致编译错误,这正是我们期望的行为。

上一篇:vc++runtime

下一篇:c++ 重载运算符

大家都在看

c++闭包

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++格式化字符串

c++ orm框架

队列c++

c++freopen怎么用

c++ 获取系统时间

c++进制转换函数

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站