9
4

3 に答える 3

9

使用std::common_type

template <std::size_t s, typename L, typename R>
MyMathVector<typename std::common_type<L, R>::type, s> operator+(MyMathVector<L, s> const& l, MyMathVector<R, s> const& r)
{
    // do addition
}

メンバー関数の場合(クラス本体で、Tsが表示されている場合):

template <typename TRHS>
MyMathVector<typename std::common_type<T, TRHS>::type, s> operator+(MyMathVector<TRHS, s> const& rhs) const
{
    // do addition
}
于 2012-07-31T15:51:13.073 に答える
5

この特性を使用しstd::common_typeて、混合操作の正しい結果の型を見つけます。

リンクされたページには、あなたのケースに非常によく似た例もあります。

于 2012-07-31T15:52:29.250 に答える
4

絶対; 使用decltype:

template<typename Other>
auto operator+(const MyMathVector<Other, size> &other)
    -> MyMathVector<decltype(std::declval<T>() + std::declval<Other>()), size>;

非メンバー オペレーターとして、実際にベクター メンバーを参照することによって意味することを言う方が良いかもしれません。

template<typename size, typename L, typename R>
auto operator+(const MyMathVector<L, size> &l, const MyMathVector<R, size> &r)
    -> MyMathVector<decltype(l[0] + r[0]), size>;
于 2012-07-31T15:53:03.540 に答える