Пара вопросов по коду:
template <class t> struct Vec2 {
union {
struct {t u, v;};
struct {t x, y;};
t raw[2];
};
Vec2() : u(0), v(0) {}
Vec2(t _u, t _v) : u(_u),v(_v) {}
inline Vec2<t> operator +(const Vec2<t> &V) const { return Vec2<t>(u+V.u, v+V.v); }
inline Vec2<t> operator -(const Vec2<t> &V) const { return Vec2<t>(u-V.u, v-V.v); }
inline Vec2<t> operator *(float f) const { return Vec2<t>(u*f, v*f); }
template <class > friend std::ostream& operator<<(std::ostream& s, Vec2<t>& v);
};
template <class t> std::ostream& operator<<(std::ostream& s, Vec2<t>& v) {
s << "(" << v.x << ", " << v.y << ")\n";
return s;
}
Конкретно по последней функции внутри структуры:
template <class > friend std::ostream& operator<<(std::ostream& s, Vec2<t>& v);
1. Что значит шаблон без указания идентификатора типа данных
template <class >
?
2. Для чего внутри структуры объявлять friend-функцию? Насколько я знаю, по-умолчанию все поля и функции структуры объявлены как public.