たとえば、次のスニペットはVC++2010でコンパイルされます。
template<int Rows, int Columns = Rows>
struct Matrix { };
Matrix<4> m;
のデフォルトの引数Columns
は、の引数値に依存することに注意してくださいRows
。
しかし、C ++ 11(またはそれ以前)でのこの標準的な動作は、どこでも信頼できますか?
たとえば、次のスニペットはVC++2010でコンパイルされます。
template<int Rows, int Columns = Rows>
struct Matrix { };
Matrix<4> m;
のデフォルトの引数Columns
は、の引数値に依存することに注意してくださいRows
。
しかし、C ++ 11(またはそれ以前)でのこの標準的な動作は、どこでも信頼できますか?
はい。そして実際のところ、それは大量のSTLコードがどのように機能するかです。
次のstd::vector
ような定義があります。
template < class T, class Alloc = allocator<T> > class vector
allocator
毎回毎回指定する必要がないように。そのようなものが無効である場合、私たちは書くことができません:
std::vector<int> data;
そして、あなたは次のように書くでしょうstd::map
:
std::map < keyType, // map::key_type
ValType, // map::mapped_type
less<keyType>, // map::key_compare
allocator<pair<const KeyType,ValType> > // map::allocator_type
> mapping;
これは、以下よりもはるかに望ましくありません。
std::map< keyType , ValType > mapping;
cplusplusによると、はい:
クラステンプレートパラメータのデフォルト値またはタイプを設定することもできます。たとえば、以前のクラステンプレート定義が次の場合:
template <class T=char, int N=10> class mysequence {..};
そして、もっとありふれたメモとして、g++-Wallはそれをコンパイルします。