将可变参数模板类声明为简单模板类的朋友

时间:2016-12-01 17:50:36

标签: c++ templates

我有一个带有可变参数模板参数包的第一个类,如下所示:

MYDIR=$(sed 's/:/\n/' <<< "$PATH" | head -n 1)

我有一个带有简单模板参数的第二个类:

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

两个模板的第一个类型参数都是相同的。

我想宣布A类是B的朋友,这样A可以访问B的一些私有方法。如何实现这个目标?

1 个答案:

答案 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);
}

wandbox example