2017-02-03 4 views
0
例えば

テンプレートパラメータがクラステンプレートのときに関数テンプレートを特化する方法は?

template<class T> 
T make() 
{ 
    return T(); 
} 

と私はTがクラステンプレートAであるとき、それを専門にしたいです。コンパイル中

template<int N> 
class A 
{}; 

template<int N> 
A<N> make<A<N>>() 
{ 
    ... 
}; 

エラー:明示的なテンプレート引数

の不正使用は、どのようにそれを行うには?

答えて

1

あなたがしようとしていることは、部分的な特殊化であり、許可されていません。 structでそれを囲む方が良いでしょう。

template<class T> 
struct Maker 
{ 
    T make() { return T(); } 
}; 

template<int N> 
class A 
{}; 

template<int N> 
struct Maker<A<N>> 
{ 
    A<N> make() 
    { 
     return A<N>(); 
    } 
}; 
0

これは部分的な特殊化ではなく、過負荷です。削除するだけです<A<N>>

template<int N> 
A<N> make() 
{ 
    ... 
}; 
+0

部分的な専門です。あなたは新しいメソッドを作る()はA以外を返します。 – user1899020

+0

@ user1899020最初の過負荷でタイプ「」( 'make ()')を使用しています。ここでは、 'int'(' make <0>() ')でそれを望みます。部分的な専門化は、より特殊化された「T」(例えば、積分型)のものである。 –

関連する問題