2017-10-05 10 views
1

今日、私は、Visual Studio C++の実装のソースコードを掘りとstd :: unique_ptrを次の行に渡ってつまずいた: クラス名の後のテンプレート引数の意味は?

template<class _Ty,class _Dx> 
    class unique_ptr<_Ty[], _Dx> 

は、私が最初の行を理解しています。二行目は私を驚かせた。テンプレートの引数がクラス名の背後にあるのはなぜですか?どういう意味ですか?おそらく、これがunique_ptrの配列の変形であるという事実と関係しているでしょうか?

+1

http://en.cppreference.com/w/cpp/language/partial_specialization – chris

+0

これは部分的な専門です。 – Jodocus

+0

尋ねる前に研究してください。あなたがC++を学んでいるだけなら、[これらの書籍の1つを読む]ことを検討してください(https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) –

答えて

3

std::unique_ptrの主要なテンプレートには、次のようになります。

template<class _Ty, class _Dx> 
class unique_ptr { 
    /* ... */ 
}; 

テンプレートは、上記の配列を除いて、いずれかのタイプのために動作します。コンパイラは、例えば上述のテンプレートのインスタンス化を検出すると

template<class _Ty, class _Dx> 
class unique_ptr<_Ty[], _Dx> { 
    /* ... */ 
}; 

:したがってstd::unique_ptrのように見えたアレイのpartial specializationを有します

std::unique_ptr<int[]> foo; 

として、プライマリテンプレートの代わりに特殊テンプレートを使用します。

関連する問題