2016-09-11 16 views
1

私は可変引数テンプレート関数の定義から宣言を分離する必要があります。アウトオブライン可変引数テンプレート関数

struct A 
{ 
    // In-line declaration of function 
    template<typename...Args> 
    A(Args&&...args); 
}; 

// Out-of-line definition of function 
template<typename...Args> 
A<Args...>::A(Args&&...args) 
{} 

int main() 
{ 
    A a("hello"); 
    return 0; 
} 

...ここで私は(クラン3.9 OS X 10)を取得エラーです:

main.cpp:8:2: error: expected unqualified-id 
A<Args...>::A(Args&&...args) 
^ 

「typename」はどこかに置く必要がありますか?事前に助けてくれてありがとう!

答えて

5

あなたが書いた:

template<typename...Args> 
A<Args...>::A(Args&&...args) 
{} 

しかし、あなたのクラスはクラステンプレートではありませんので、以下のあなたはそれが

template<typename...Args> 
A::A(Args&&...args) 
{} 


でもそれならば行う方法ですクラステンプレートでした。以下の例は、 クラステンプレートのテンプレートコンストラクタ

template<typename... T> 
struct A 
{ 
    // In-line declaration of function 
    template<typename...Args> 
    A(Args&&...args); 
}; 

// Out-of-line definition of function 
template<typename... T> 
template<typename... Args> 
A<T...>::A(Args&&...args) 
{} 
関連する問題