我有一个带有可变参数模板参数包的第一个类,如下所示:
MYDIR=$(sed 's/:/\n/' <<< "$PATH" | head -n 1)
我有一个带有简单模板参数的第二个类:
template <typename T, typename... Args>
class A
{
public: ...etc
两个模板的第一个类型参数都是相同的。
我想宣布A类是B的朋友,这样A可以访问B的一些私有方法。如何实现这个目标?
答案 0 :(得分:2)
如果您对无条件友谊感到满意(即每个A
都是B
的朋友,即使T
参数不匹配),然后你可以简单地使用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);
}