1

说我有这种类型:

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++ 类型提升规则。是否有更好、更正确的方法来返回“合理”基本类型的值?我担心我可能会为 a和 afloat的产品返回 a 。doublefloat

4

1 回答 1

5

它返回一个“合理的”类型,这正是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;
}
于 2013-10-13T15:12:25.857 回答