c++ - 如何在模板中返回正确类型的数据?
问题描述
#include <iostream>
using namespace std;
template <class X, class Y>
Y big(X a, Y b)
{
if (a > b)
return (a);
else return (b);
}
int main()
{
cout << big(32.8, 9);
}
这里我在 CPP 中使用模板,所以当我big
绕过参数double
和int
类型调用函数时,我想要返回答案是double
. 这里的类型,它返回32
而不是32.8
.
我如何获得我想要的输出?如何编写正确的返回类型的big
函数?
解决方案
一个函数只能有一个在编译时必须知道的返回类型。但是,您可以使用std::common_type
, 来返回两个参数都可以隐式转换为的类型。
那将是
#include <type_traits>
template <class X, class Y>
typename std::common_type<X,Y>::type big(X a, Y b)
{
if (a > b)
return a;
else return b;
}
并检查它是否真的返回 adouble
当传递 anint
和 adouble
我们可以这样做:
int main() {
auto x = big(4.2,42);
std::cout << std::is_same<decltype(x),double>::value;
}
哪个打印
1
PS:std::common_type
可以在幕后使用三元运算符,因此该解决方案与其他答案(auto
+三元)没有太大区别。的真正强大之std::common_type
处在于它接受任意数量的参数。
推荐阅读
- angular - 需要使用 Moment.js 而不是 UTC 时间戳接收本地 UNIX 时间戳
- xampp - 无法使 Xammp 托管的本地网站通过 VPN 工作
- javascript - 表格单元格内 DIV 的背景图像未即时加载
- javascript - 如何在 react-select 中合并 selectedOptions
- css - 如何在 scss 中使用 rgba 作为 css 变量?
- html - Django - 用户登录时导航栏未正确显示
- android-studio - 错误完成:Gradle 任务 assembleDebug 失败,退出代码为 -1,Flutter
- jquery - AJAX 成功后表未重新加载
- reactjs - React & RXJS 非标准
- debugging - 时间复杂度的状态差异?