在C++中,如何将返回值模板化为参数值的唯一值

In C++ How do I template the return value to be unique from the parameter value?

本文关键字:参数 唯一 返回值 C++      更新时间:2023-10-16

在C++中,如何将返回值模板化为参数值的唯一值?我的代码如下——现在,如果数字的数据类型是int,我希望它是double-out。

template <class T>
T divide(T number)
 {
    return number/10;
 }

总的来说,我有这个

 divide(5);
 divide(2.5);

在2.5的情况下,输入和输出的值将是double类型,所以没有问题,但在5的情况下它将作为int输入,但我需要它不要被截断并以double类型返回。

template <class T, Class T1>
T1 divide(T number)
 {
    return number/10;
 }

这不起作用,因为它在函数中查找两个参数。

T1 template <class T>
T1 divide(T number)
 {
    return number/10;
 }

这不会给我提供存储类或类型说明符的声明——当我在T1之前将单词class添加到该行时,我会得到错误消息:函数返回不完整的类型。

最通用的方法是使用辅助模板

template <typename T>
struct calc_return {
  using type = T;
};
template <class T>
typename calc_return<T>::type divide(T number)
{
   return number/10;
}

现在,如果规则有异常,您可以使用您想要的任何逻辑专门化calc_return

// Prior to the declaration of divide()
template <>
struct calc_return<int> {
  using type = double;
};

在这种情况下,我认为您需要

template <class T>
auto divide(T number) -> decltype(number/10.0)
{
   return number/10.0;
}

如果你至少除以10.0而不是10,编译器就很清楚返回类型应该是什么。

或者C++14风格:

template <class T>
auto divide(T number) // Compiler will figure it out from the return statement.
{
   return number/10.0;
}

你的意思是这样的吗:

template <class T, class T1>
T1 divide(T number)
{
    return ((T1)number) / 10;
}
....
double res = divide<int, double>(2);