Этот вопрос частично основан на упражнении 15-4 в Ускоренное C ++ [1] и коде в этой книге. Я хочу объявить функцию myclone
как друга класса, чтобы он имел доступ к закрытым членам. Функция myclone
объявлена как шаблон, но я не хочу предоставлять всем возможным функциям доступ к закрытым членам, только тем, которые связаны с этим классом.
class A{
template <class T>
friend T* myclone(const T*);
A* clone() const {return new A(*this);}
}
какой-то другой файл:
template <class T>
T* myclone(const T* t) {return t->clone();}
Другая гипотетическая функция myclone
может вызывать метод clone
объекта A
, но я хочу ограничить частный доступ A* myclone(const A*)
. Есть ли способ сделать это или я обдумываю это, и такая ситуация никогда не возникнет на практике? Должен ли я использовать шаблон специализации?
[1] Koenig, A., & Moo, BE (2000). Практическое программирование на C ++ на примере . Пирсон.