4

例如,以下代码片段在 VC++ 2010 中编译:

template<int Rows, int Columns = Rows>
struct Matrix {  };

Matrix<4> m;

请注意, 的默认参数Columns取决于 的参数值Rows

但是,我在任何地方都可以依赖 C++11(或更早版本)中的这种标准行为吗?

4

2 回答 2

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;
于 2013-02-16T05:48:29.690 回答
2

根据cplusplus,是的:

也可以为类模板参数设置默认值或类型。例如,如果之前的类模板定义是:

template <class T=char, int N=10> class mysequence {..};

在更普通的注释中, g++ -Wall 将编译它。

于 2013-02-16T05:42:47.310 回答