首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ 11:如何编写返回类型不同的2个模板函数

C++ 11引入了一种新的特性,即函数模板的返回类型可以根据函数参数的不同而不同。这种特性被称为函数模板的返回类型推导(Return Type Deduction)。

在C++ 11中,我们可以使用auto关键字来声明函数的返回类型,并结合尾置返回类型(Trailing Return Type)语法来实现返回类型的推导。下面是编写返回类型不同的两个模板函数的示例:

代码语言:txt
复制
template<typename T>
auto add(T a, T b) -> decltype(a + b) {
    return a + b;
}

template<typename T1, typename T2>
auto multiply(T1 a, T2 b) -> decltype(a * b) {
    return a * b;
}

在上面的示例中,第一个模板函数add接受两个相同类型的参数,并返回它们的和。返回类型使用了decltype关键字来推导a + b的类型。

第二个模板函数multiply接受两个不同类型的参数,并返回它们的乘积。同样地,返回类型也使用了decltype关键字来推导a * b的类型。

这种返回类型推导的特性可以方便地处理返回类型依赖于函数参数的情况,提高了代码的灵活性和可读性。

在腾讯云的CVM(云服务器)产品中,您可以使用C++ 11来编写自己的应用程序,并通过CVM实例来运行和部署。您可以通过以下链接了解更多关于腾讯云CVM的信息:

腾讯云CVM产品介绍:https://cloud.tencent.com/product/cvm

希望以上信息能对您有所帮助!如有更多问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++模板函数参数类型返回类型方法

参考链接: C++编程默认参数(参数) 假设要利用模板元编程获取位于index参数类型:  template struct ArgTypeAt...{     // FuntionType返回类型和参数类型?...  这时FunctionType就是一个单独类型int(int, short, float)了,里面含有各参数类型。...要把FuntionType分离成返回类型和参数类型,方法是利用模板特化,然后参数类型是一个包,再把参数包展开就能得到各位置参数类型:  template<int index, class FuntionType...(默认是__cdecl)改成__stdcall这个模板特化就不匹配了,因为修饰符也是类型一部分,而C++泛型并没有修饰符变了还能匹配方法(只有类型变了能匹配)。

4.1K50
  • 返回类型引用(ref-qualified)C++成员函数暗示了什么?

    一、引子:返回引用类型成员函数是 暗示了使用它this指针是左值还是右值。反过来说,如果一个成员函数返回引用类型,那么对this指针是左值还是右值都是调用同一个函数。...----二、解释:先说结论,来说一个c++一个理解。如果成员函数是有一致性(consistency),那么non-const, non-static函数 总是要被&( &-qualified)。...----三、扩展当然书写设计自己成员函数,不一定都有必要去做ref-qualified,但是这里我带你看一些使用ref-qualified真实例子。...有时候一个成员函数需要有能力从类中取到资源,那么他就能被右值rvalue call到,否则,它就是const修饰成员函数。...3.2、将一个函数return value传递作为给另一个函数输入这种场景需要&- overload和&&-overload (+ potentiallyconst/volatilevariations

    20320

    C++ 新特性学习(五) — 引用包装、元编程类型属性和计算函数对象返回类型

    、(成员)函数(指针) 构造时必须传入所引用对象或引用对象右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类引用类型 get方法, 用于获取引用对象...()操作符, 用于执行引用函数 同时与其配对函数有 std::ref 返回std::reference_wrapper,可以视为转换对象为引用 std::cref 返回常量引用对象std::reference_wrapper...元编程类型属性 元编程定义是可以修改自身或其他代码代码,当然,C++不是动态语言,这个修改可以在编译或执行时期。...struct Algorithm { template int do_it (T1, T2) { /*...*/ } }; // 根据给定类型选择不同算法...(仿函数返回类型 主要涉及一个模板函数std::result_of,它使用了decltype并支持函数对象(关于decltype请参见 https://www.owent.net/2011/508

    1.3K30

    C++ 新特性学习(五) — 引用包装、元编程类型属性和计算函数对象返回类型

    、(成员)函数(指针) 构造时必须传入所引用对象或引用对象右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类引用类型 get方法, 用于获取引用对象...()操作符, 用于执行引用函数 同时与其配对函数有 std::ref 返回std::reference_wrapper,可以视为转换对象为引用 std::cref 返回常量引用对象std::...然后是 元编程类型属性 元编程定义是可以修改自身或其他代码代码,当然,C++不是动态语言,这个修改可以在编译或执行时期。...struct Algorithm { template int do_it (T1, T2) { /*...*/ } }; // 根据给定类型选择不同算法...(仿函数返回类型 主要涉及一个模板函数std::result_of,它使用了decltype并支持函数对象(关于decltype请参见 https://www.owent.net/2011/508

    1.8K30

    C++11:模板实现opencl向量类型简单运算符重载及length,distance函数

    ,但c/c++以及openclAPI本身并没有提供对这些向量类型一般运算支持。...如果能像模板内核代码一样,为向量运算符提供简单向量运算功能,就可以大大简化这些代码。 利用C++模板计算函数,可以实现上面的功能。...+,-运算,支持两个向量类型数据加/减运算,以及一个向量和一个标量类型加/减运算,以及legnth,distance函数。...代码开始有两个很长模板函数cl_vector_type和is_cl_vector,所有的其他函数模板都要用到这两个模板函数: cl_vector_type用于构造一个指定元素类型和长度opencl...有了这些模板函数支持,主机端opencl向量运算就变得像在内核代码中一样简单,还以前面的例子用模板函数重写,就是这样: cl_int4 p1={4,2,0,9}; cl_int4 p2={3,9,-

    1.7K10

    C++函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入参数要求 | 参数作返回值 )

    讨论问题 : 本章只针对一点进行讨论 , 那就是对两种类型参数修改 , 是否影响到外部变量 ; 传入什么样参数才能修改外部变量 , 即 参数当返回值使用 ; 2 ....参数使用语言环境 : 引用类型参数只能在 C++ 环境中使用 , 指针类型参数可以用于 C / C++ 两种语言环境中 , 因此很多基础库 如 FFMPEG , OpenSL ES 等使用都是指针类型参数...C 语言中参数 分类 : ① 普通变量参数 : C 语言中 普通变量 ( 非指针变量 ) 作为参数 , 只能进行值传递 , 不能通过参数返回结果 ; ② 指针变量参数 : C 语言中 , 如果要让函数参数可以将结果返回...C++引用参数 : C++ 在 C 语言基础上扩展了 引用 数据类型 , 使用引用可以替代上面的指针作为参数情况 , 使参数具有返回结果能力 ; 3 ....引用作为参数和返回值 ---- 引用作为参数和返回值 : 如果是引用作为参数 , 修改 N 维指针指向地址 , 那么需要传入 N 维指针引用即可 ,在函数中修改该引用 , 即可修改外部被引用变量

    2.2K20

    一个类如何实现两个接口中同名同参数不同返回函数

    String类型,只是返回值一个是String一个是Int,现在我们要声明一个类X,这个类要同时实现这两个接口: public class X:IA,IB 由于接口中要求方法方法名和参数是一样...,所以不可能通过重载方式来解决,那么我们该如何同时实现这两个接口拉?...解决办法是把其中不能重载方法直接写成接口方法,同时要注意这个方法只能由接口调用,不能声明为Public类型.所以X定义如下: public class X:IA,IB {     public...IB.GetA(string a)//实现IB接口     {         Console.WriteLine("IB.GetA");         return 12;     } } 同样如果有更多同名同参不同返回接口...,也可以通过"接口名.函数名"形式实现.

    2.9K20

    C++】泛型编程 ⑧ ( 类模板继承语法 | 普通类 继承 类模板语法 | 类模板 继承 类模板语法 | 继承类模板必须指定具体类型参数列表 | 继承 类模板 必须重写构造函数 )

    子类 : // 类模板 继承时 , 需要具体化 类模板 // 也就是 指定 类模板 类型参数列表 , 将 泛型类型 固定下来 // C++ 编译器 只有知道了具体类型 , 才能知道 父类占用内存大小..., C++ 编译器需要知道 具体 数据类型 是什么 , 才能生成 具体类 , 只有这样 , 将具体数据类型固定下来 , C++ 编译器 才能知道 父类 所占 内存大小 , 才能正确分配内存 ;..., 调用 类模板 具体类 构造函数 , 如果 子类 继承 类模板父类 , 如果 子类没有实现 构造函数 , // 类模板 继承时 , 需要具体化 类模板 // 也就是 指定 类模板 类型参数列表...继承时 , 需要具体化 类模板 // 也就是 指定 类模板 类型参数列表 , 将 泛型类型 固定下来 // C++ 编译器 只有知道了具体类型 , 才能知道 父类占用内存大小 // 才能正确分配内存...继承时 , 需要具体化 类模板 // 也就是 指定 类模板 类型参数列表 , 将 泛型类型 固定下来 // C++ 编译器 只有知道了具体类型 , 才能知道 父类占用内存大小 // 才能正确分配内存

    1K30

    C++】泛型编程 ⑪ ( 类模板运算符重载 - 函数实现 写在类外部不同 .h 头文件和 .cpp 代码中 )

    函数声明 和 实现 写在相同 .cpp 源码文件中 ; 类模板 函数实现 在 类外部进行 , 函数声明 和 实现 写在不同 .h 和 .cpp 源码文件中 ; 在博客 【C++】泛型编程 ⑨ (...; 在博客 【C++】泛型编程 ⑩ ( 类模板运算符重载 - 函数实现 写在类外部同一个 cpp 代码中 | 类模板 外部友元函数二次编译问题 ) 中 , 分析了 第二种情况 , 类模板 ...; 一、类模板运算符重载 - 函数实现 写在类外部不同 .h 头文件和 .cpp 代码中 1、分离代码 后 友元函数报错信息 - 错误示例 上一篇博客 【C++】泛型编程 ⑩ ( 类模板运算符重载...+(Student& s) { // 函数内部 模板类型 , 可加 Student 可不加 Student // 不加 也可以使用 , 加了也不会报错 Student...; 相当于 将 类模板 函数声明 和 函数实现 都定义在了 Student.h 头文件中 ; 这种类型头文件 可以改成 .hpp 后缀 , 表明该文件中同时包含了 函数声明 和 函数实现 ; 二

    23810

    【C++11】让程序更简洁——模板

    C++11 改进了编译器解析规则,尽可能将多个“>”解析成模板参数结束符,方便了编写模板相关代码。...定义方法和变量声明类似,显示了C++语法一致性,但是有时又会增加C++代码阅读复杂度,如在对函数指针进行重定义时: typedef void (*func_t)(int ,int); 使用using...using语法更加强大,编写代码更加简洁。 三、函数模板默认模板参数 在C98中,类模板可以有默认模板参数,函数模板默认模板参数是不被支持,这一限制,在C++11中得到了解除。...,如果在使用函数模板时显示指定了模板参数类型函数返回值将返回是指定参数类型。...如: func(123);//func返回值为long long 还有一种使用方式是将函数模板默认参数和模板参数自动推导一起使用,在一起使用时,如果函数模板无法自动推导,将会使用默认模板参数

    67130

    浅谈 C++ 元编程

    别名模板 和 变量模板 分别在 C++ 11C++ 14 引入,分别提供了具有模板特性 类型别名 (type alias) 和 常量 (constant) 简记方法。...前者只能用于简记 已知类型,并不产生新类型;后者则可以通过 函数模板返回值 等方法实现。尽管这两类模板不是必须,但可以增加程序可读性(复杂性)。...一般思路是:提供两类重载 —— 一类接受 任意参数,内部 递归 调用自己;另一类是前者 模板特化 或 函数重载,直接返回结果,相当于 递归终止条件。它们重载条件可以是 表达式 或 类型。...现代 C++ 也不断地增加语言特性,致力于降低元编程复杂性: C++ 11  别名模板提供了对模板类型简记方法; C++ 14  变量模板提供了对模板中常量简记方法; C++ 17  ...4.2 实例化错误 模板实例化 和 函数绑定 不同:在编译前,前者对传入参数是什么,没有太多限制;而后者则根据函数声明,确定了应该传入参数类型

    3K61

    C++ 特性使用建议

    3.函数重载 (1)仅在输入参数类型不同、功能相同时使用重载函数(含构造函数),当使用具有默认形参值函数(方法)重载形式时,需要注意防止二义性。...您或许会加一大堆何时何处处理异常规定来降低风险,然而开发者记忆负担更重了。 (4)异常安全需要RAII和不同编码实践。要轻松编写出正确异常安全代码需要大量支持机制。...如果你代码需要根据不同对象类型执行不同行为的话,请考虑用以下两种替代方案之一查询对象类型: (1)虚函数可以根据子类类型不同而执行不同代码。这是把工作交给了对象本身去处理。...使用const,大家更容易理解如何使用变量。编译器可以更好地进行类型检测,相应地,也能生成更好代码。人们对编写正确代码更加自信,因为他们知道所调用函数被限定了能或不能修改变量值。...22.模板编程 不要使用复杂模板编程。模板编程是图灵完备,利用C++模板实例化机制可以被用来实现编译期类型判断、数值计算等。

    1.7K20

    C++从入门到精通——模板

    前言 C++模板C++语言中一种泛型编程技术,可以实现在编译期间生成不同类型函数或类。通过使用模板,可以编写通用代码,使其能够处理多种不同类型数据。...C++模板可以分为函数模板和类模板两种类型 一、泛型编程 如何实现一个通用交换函数呢?...如果在C++中,也能够存在这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料铸件(即生成具体类型代码),那将会节省许多头发。巧是前人早已将树栽好,我们只需在此乘凉。...函数模板是一种通用函数定义,它可以根据不同参数类型自动实例化成具体函数函数模板可以用于编写具有通用性代码,可以处理多种类型数据,提高代码复用性和灵活性。...函数模板原理 那么如何解决上面的问题呢?

    10110

    C++特性使用建议

    3.函数重载 (1)仅在输入参数类型不同、功能相同时使用重载函数(含构造函数),当使用具有默认形参值函数(方法)重载形式时,需要注意防止二义性。...您或许会加一大堆何时何处处理异常规定来降低风险,然而开发者记忆负担更重了。 (4)异常安全需要RAII和不同编码实践。要轻松编写出正确异常安全代码需要大量支持机制。...如果你代码需要根据不同对象类型执行不同行为的话,请考虑用以下两种替代方案之一查询类型: (1)虚函数可以根据子类类型不同而执行不同代码。这是把工作交给了对象本身去处理。...编译器可以更好地进行类型检测,相应地,也能生成更好代码。人们对编写正确代码更加自信,因为他们知道所调用函数被限定了能或不能修改变量值。即使是在无锁多线程编程中,人们也知道什么样函数是安全。...如今 constexpr 就可以定义浮点式真・常量,不用再依赖字面值了;也可以定义用户自定义类型常量;甚至也可以定义函数调用所返回常量。 14.整型 C++ 内建整型中,仅使用 int。

    1.9K30
    领券