此问题部分基于加速C++[1]中的练习15-4和该书中的代码。我想将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
函数可以调用A
对象的clone
方法,但我想限制对A* myclone(const A*)
的私有访问。有没有办法做到这一点,或者我想得太多了,而这种情况在实践中永远不会发生?我应该使用模板专业化吗?
[1] Koenig,A.,&Moo,B.E.(2000(加速C++实用程序设计实例。皮尔逊。
您不能只允许朋友访问您的某些私人部件。这是一件要么全有要么全无的事情。
friend A* myclone(const A*);
不起作用,因为没有这样的功能。模板不是那种功能,它的任何专业化都不是。如果你想成为某个特定专业化的朋友,就这么说吧:
template <class T> T* myclone(const T*); // needs to be declared first
class A {
friend A* myclone<A>(const A*);
...