gpt4 book ai didi

c++ - 如何在模板中返回正确的数据类型?

转载 作者:行者123 更新时间:2023-12-01 12:09:31 25 4
gpt4 key购买 nike

#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中使用模板,因此,当我绕过 bigdouble类型的参数调用函数 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;
}

并在传递 doubleint时检查它是否实际上返回了 double,我们可以执行以下操作:
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的真正力量在于它可以接受任意数量的参数。

关于c++ - 如何在模板中返回正确的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59756562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com