2016-12-01 114 views
2

我有一個一流的具有可變參數模板參數包像這樣:聲明一個可變參數模板類簡單的模板類的朋友

template <typename T, typename... Args> 
class A 
{ 
    public: ...etc 

我有一個第二類用一個簡單的模板參數:

template <typename T> 
class B 
{ 
     public: ...etc 

這兩個模板的第一個類型參數都是相同的。

我想宣佈A類是B的朋友,以便A可以訪問B的一對私有方法。如何實現此目的?

回答

2

如果你是無條件的友誼(即每AB的朋友,即使T參數不匹配) OK,那麼你可以簡單地使用friend class

template <typename T> 
class B; 

template <typename T, typename... Args> 
class A 
{ 
public: 
    void test(B<T>& b); 
}; 

template <typename T> 
class B 
{ 
    template <typename, typename...> 
    friend class A; 

    int priv; 
}; 

template <typename T, typename... Args> 
void A<T, Args...>::test(B<T>& b){ (void) b.priv; } 

以下代碼可以編譯:

int main() 
{ 
    B<int> b; 
    A<int, float> a; 
    a.test(b); 
} 

wandbox example

+0

謝謝。 T參數是相同的將在其他地方執行,所以沒有關於無條件的大事。 – Bitrex