他の多くのコンテナー、式テンプレート、およびリテラル型のためにオーバーロードする必要があるコンテナーtemplate <typename T> class A
があります。operator+
U
wrap
私の現在の戦略は、個々の要素へのアクセス方法と定義方法をカプセル化するテンプレート関数を定義することです。
template <typename T, typename U>
auto operator+(Wrapped<T>&& lhs, Wrapped<U>&& rhs) -> decltype(...)
{
....
}
operator+
ただし、次のオーバーロードはあいまいです。
template <typename T, typename U>
auto operator+(const A<T>& lhs, U&& rhs) ->
decltype(wrap(lhs) + wrap(std::forward<U>(rhs)))
{
return wrap(lhs) + wrap(std::forward<U>(rhs));
}
template <typename T, typename U>
auto operator+(T&& lhs, const A<U>& rhs) ->
decltype(wrap(std::forward<T>(lhs)) + wrap(rhs))
{
return wrap(std::forward<T>(lhs)) + wrap(rhs);
}
あいまいさを最もよく解決するにはどうすればよいですか?