@sanek2005

Возможно ли сделать шаблонную функцию дружественной классу?

В общем, у меня есть класс. у него определенные поля. один объект этого класса является глобальной переменной. и вот так вышло, что двум шаблонным функциям надо обращаться к полям этого объекта напрямую. делать поля public не хочется, нарушается инкапсуляция. да и обращаются к ним вне класса только как раз эти два шаблона. можно ли сделать шаблонные функции членами класса - не знаю, да и они не должны ими быть по логике
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
#include <iostream>

class Wrap
{
public:
    Wrap(int x) : value(x) {}
private:
    int value;

    template <class T>
    friend void out(const T&);
};

template <>
void out(const Wrap& x)
    { std::cout << x.value << std::endl; }

int main()
{
    Wrap x(42);
    out(x);
    return 0;
}


Если нужно в пространстве имён…
spoiler
#include <iostream>

namespace qq {
    template <class T>
    void out(const T&);
}

class Wrap
{
public:
    Wrap(int x) : value(x) {}
private:
    int value;

    template <class T>
    friend void qq::out(const T&);
};

template <>
void qq::out(const Wrap& x)
    { std::cout << x.value << std::endl; }

int main()
{
    Wrap x(42);
    qq::out(x);
    return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы