2016-12-01 93 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