说我有这种类型:
template <typename T, typename U>
using product_type = decltype(::std::declval<T>() * ::std::declval<U>());
我在功能模板中使用
template <typename T, typename U>
product_type<T, U> product(T const a, U const b)
{
return a * b;
}
模板产生的模板函数是否会为C ++基本类型返回“合理的”产品值?我想这将使用C ++类型的促销规则。是否有更好,更正确的方法来返回“合理”基本类型的值?我担心我可能会为float
和double
的产品返回float
。
答案 0 :(得分:5)
它返回一个合理的&#34;类型,正是a*b
会产生的。您的代码也可以写成:
template <typename T, typename U>
auto product(T const a, U const b) -> decltype( a * b )
{
return a * b;
}
或使用C ++ 14:
template <typename T, typename U>
auto product(T const a, U const b)
{
return a * b;
}