C++语言在数组的支持方面不强其他语言强劲,如FORTRAN、BASIC、甚至在COBOL中可以产生二维数组、三维数组,乃至于n维数组,但你能C++中这么做吗?有同学不同意了,C++中可以产生二维数组啊,int data[2][3]不是吗?但是,如果这样:
还行吗?C++不允许!
那么怎么办呢?《more effective c++》中Item 30有详细的介绍,但没有给出具体代码。本人实现了下:
当然,其中也遇到了一些困难,现整理如下:
FIRST ,代码第27行中,typename Array2D<T>::Array1D&,关键字typename有什么作用?
typename有双重意义,具体参见<<effective c++>> Item 42。这里只由于其第二重意义。观察Array2D<T>::Array1D,其类型取决于template参数T。template内出现的名称如果相依于某个template参数,称之为从属名称。如果从属名称在class内呈嵌套状,则称之为嵌套从属名称。而嵌套从属名称有可能导致解析困难,所以必须在其前加上关键字typename表示其是一个类型。
SECOND ,代码50~55读者是否感到有些奇怪。为什么不写成dim1Data = new myType[dim1](realDim2);呢?事实上,该语句是不能通过编译的。因为这不符合C++的语法。那么只能用点小聪明代替了。这里还要注意就是代码行62调用的是类赋值函数,刚开始笔者也在此处吃了亏。
总之,学习C++之路还是很漫长啊。