例如,以下代码段在VC ++ 2010中编译:
template<int Rows, int Columns = Rows>
struct Matrix { };
Matrix<4> m;
请注意Columns
的默认参数取决于Rows
的参数值。
但C ++ 11(或更早版本)中的标准行为是否可以依赖于任何地方?
答案 0 :(得分:4)
是。事实上,它是多少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;
答案 1 :(得分:2)
根据cplusplus,是的:
也可以为类模板参数设置默认值或类型。例如,如果先前的类模板定义是:
template <class T=char, int N=10> class mysequence {..};
在一个更平凡的笔记中,g ++ -Wall将编译它。