2014-02-15 69 views
6

如何声明一个可变模板函数作为朋友?如何声明一个可变模板函数作为朋友?

举例如下:

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

回答

9

这是非常简单的。这仅仅是一个模板声明,其中添加了friend说明符:

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

    A(T) { } 
};