产品类型为2个操作数

时间:2013-10-13 15:08:42

标签: c++ c++11

说我有这种类型:

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 ++类型的促销规则。是否有更好,更正确的方法来返回“合理”基本类型的值?我担心我可能会为floatdouble的产品返回float

1 个答案:

答案 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;
}