2014-02-15 104 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) { } 
};