logo search
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.14.7 Друзья

Функция-друг для шаблона типа не является неявной шаблонной функцией,

например:

template<class T> class task {

// ...

friend void next_time();

friend task<T>* preempt(task<T>*);

friend task* prmt(task*); // ошибка

// ...

};

Здесь функция next_time() становится другом всех классов task, а

каждый класс task имеет в качестве друга функцию preempt() c

соответствующими типами параметров. Функцию preempt() можно

определить как шаблон типа.

template<class T>

task<T>* preempt(task<T>* t) { /* ... */ }

Описание функции prmt() является ошибочным, поскольку типа

task не существует, а есть только специальные шаблонные типы

task<int>, task<record>, и т.д.