例如,以下代码片段在 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 将编译它。