在C++中,如何将返回值模板化为参数值的唯一值
In C++ How do I template the return value to be unique from the parameter value?
在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);
相关文章:
- 如何反转整数参数包
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 什么..(省略号)作为函数原型中唯一的函数参数,C++?
- 常量引用函数参数的地址何时唯一?
- 唯一指针作为默认参数
- C (函数)模板将其返回其唯一参数而无需复制某些类型
- 使用折叠表达式检查可变参数模板参数是否唯一
- 如何将唯一指针传递给函数中所需的特定参数
- 模板,lambda作为每个实例化的唯一默认参数
- 如何检查参数包中的每个类型是否唯一
- 重构,其中唯一函数具有不同的参数
- 查找参数包的唯一值的数目
- Boost Python def 成员函数,它调用静态函数,其中 self 作为唯一的参数
- 在C++中,如何将返回值模板化为参数值的唯一值
- 是否可以使用 std::p air 作为关联容器(如 std::map)的(唯一)模板参数
- 传递唯一函数作为参数
- 模板参数无效(唯一指针)
- 编译器是否会将给出常量参数的简单函数简化为唯一的指令?
- 可变模板类:每个可变模板参数可以实现一个唯一的成员函数吗
- multi_index哈希的唯一可选参数