2014-10-17 78 views
2

这极小的例子将无法编译,因为A<int>不能访问私有成员iA<double>如何访问其他模板类实例的私有成员?

template <class T> 
class A { 
    int i; 
    public: 
    template <class U> 
    void copy_i_from(const A<U> & a){ 
     i = a.i; 
    } 
}; 

int main(void) { 
    A<int> ai; 
    A<double> ad; 
    ai.copy_i_from(ad); 
    return 0; 
} 

我无法找到正确的方法,使那些模板实例朋友。

+0

'A '和'A '是完全不同的类。因此,他们无法相互访问彼此的私人成员。 – 101010 2014-10-17 09:39:40

+0

@ 40two当然,关键是如何让他们与某种朋友声明。 – DarioP 2014-10-17 09:41:20

回答

3
template <class T> 
class A { 
    template<class U> 
    friend class A; 
    int i; 
    public: 
    template <class U> 
    void copy_i_from(const A<U> & a){ 
     i = a.i; 
    } 
}; 

int main(void) { 
    A<int> ai; 
    A<double> ad; 
    ai.copy_i_from(ad); 
    return 0; 
} 
+0

你认为有可能让朋友只有这种方法吗? – DarioP 2014-10-17 09:48:59