2014-10-17 114 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