具有不同模板参数的友元类模板

3

是否可以声明一个带有其他模板参数的自定义类模板为友元?

template<class T, class... Ts>
class A {
    template<class U> friend class A<U, Ts...>;    //compile error - C3772  'A<U>': invalid friend template declaration 
};
2个回答

2
template<class T, class... Ts>
class A {
    template<class U, class... Us> friend class A; //here you go
};

无需在A之后指定模板参数。

问题在于引入了一个新的参数包(Us)。我只想让A的第一个参数不同,这也可能吗? - Philipp Neufeld
@Philinator 我很确定在当前标准下这是不可能的。 - xinaiz

2

类模板的部分特化不能被声明为友元。只有一个(完全)特化或整个类模板可以。如果您确实需要成为所有U特化的朋友,您需要成为整个模板的朋友:

template<class U, class... Us> friend class A;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接