声明朋友模板函数



此问题部分基于加速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*);
...

最新更新