Lze v C++ vytvořit něco jako částečne vázaného přítele šablonové třídy?
Myslím tím: mám šablonovou třídu a chci přátelskou funkci, která bude také šablonou, ale bude vázána na typ třídy.
Jednosušeji řečeno chci přetížit operátor << kvůli výpisu objektu třídy, která je šablonová a nechci ten operátor svázat pevně s std::ostream, ale obecně s std::basic_ostream<...>.
Myslel jsem, že to půjde takto, ale hlásí mi to přístup k privátním položkám třídy (nepovažuje to tu funkci za přítele)
template <typename float_t>
class bod;
// prototyp šablonové funkce
template <typename char_t, typename traits, typename float_t>
std::basic_ostream<char_t, traits>&
operator <<(std::basic_ostream<char_t, traits> &os, const bod<float_t> &b);
template <typename float_t = double>
class bod
{
private:
float_t x,
y;
public:
bod(float_t fx, float_t fy) : x(fx), y(fy) {}
// částečně vázaný šablonový přítel
template <typename char_t, typename traits>
friend std::basic_ostream<char_t, traits>&
operator << <>(std::basic_ostream<char_t, traits> &os, const bod<float_t> &b);
};
template <typename char_t, typename traits, typename float_t>
std::basic_ostream<char_t, traits>&
operator <<(std::basic_ostream<char_t, traits> &os, const bod<float_t> &b)
{
return (os << "[" << b.x << ";" << b.y << "]");
}
Předem díky