首页 > 解决方案 > 如何在模板中返回正确类型的数据?

问题描述

#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绕过参数doubleint类型调用函数时,我想要返回答案是double. 这里的类型,它返回32而不是32.8.

我如何获得我想要的输出?如何编写正确的返回类型的big函数?

标签: c++functiontemplatesreturn-typefunction-templates

解决方案


一个函数只能有一个在编译时必须知道的返回类型。但是,您可以使用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处在于它接受任意数量的参数。


推荐阅读