如何将变量模板函数声明为朋友?

时间:2014-02-15 03:46:03

标签: c++ templates c++11 variadic-templates friend-function

如何将变量模板函数声明为朋友?

例如如下:

template<class T>
class A
{
    friend ??? MakeA ??? ; // What should be placed here ???

    A(T)
    {}
};

template<class T, class... Args>
A<T> MakeA(Args&&... args)
{
    T t(std::forward<Args>(args));

    return A(t);
}

1 个答案:

答案 0 :(得分:10)

这很简单。它只是一个模板声明,添加了friend说明符:

template<class T>
class A
{
    template<class T1, class... Args>
    friend A<T1> MakeA(Args&&... args);

    A(T) { }
};