声明朋友模板功能

问题描述 投票:0回答:1

此问题部分基于Accelerated 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函数可以调用clone对象的A方法,但是我想限制对A* myclone(const A*)的私有访问。有没有办法做到这一点,还是我想得太多,而这种情况在实践中永远不会发生?我应该使用模板专业化吗?

[1] Koenig,A.&Moo,B. E.(2000)。 示例加速C ++实用编程。皮尔逊。

c++ templates friend accelerated-c++
1个回答
0
投票

您不能仅允许朋友访问您的某些私人部分。这是全有还是全无。

friend A* myclone(const A*);不起作用,因为没有这样的功能。模板不是那个功能,它的任何专业化也不是。如果您想和某个专业领域成为朋友,那就这么说:

template <class T> T* myclone(const T*); // needs to be declared first

class A {
   friend A* myclone<A>(A*);
   ...
© www.soinside.com 2019 - 2024. All rights reserved.