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++ の型昇格規則を使用すると思います。「合理的な」基本型の値を返すための、より適切で正しい方法はありますか? たとえば、とfloatの積に対して を返すのではないかと心配しています。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 に答える