Например, допустим, у меня есть простая шаблонная структура 2D-вектора:
template <typename T>
struct Vec { T x, y; };
И общий c способ суммирования:
template <typename T, typename U>
constexpr auto operator+(const Vec<T>& u, const Vec<U>& v) {
return Vec<decltype(u.x + v.x)>{u.x + v.x, u.y + v.y};
}
Но я должен перепишите template <typename T, typename U>
для всех остальных c операций (-, *, / et c.). I wi sh Я мог бы сделать что-то вроде:
template <typename T, typename U>
{
constexpr auto operator+(const Vec<T>& u, const Vec<U>& v) { /* ... */ };
constexpr auto operator-(const Vec<T>& u, const Vec<U>& v) { /* ... */ };
/* ... */
}
Кроме того, как сказано в этом потоке , auto
не допускается при вложении в спецификатор декларации, что означает что приведенное ниже решение недействительно (даже если оно каким-то образом компилируется):
constexpr auto operator+(const Vec<auto>& u, const Vec<auto>& v) { /* ... */ }