0

这个问题部分基于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, BE (2000)。通过示例加速 C++ 实用编程。皮尔逊。

4

1 回答 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>(const A*);
   ...
于 2020-03-29T20:35:59.513 回答