随着C数组,它是相当容易写代码,采取任何大小的数组:std ::数组迭代器范围没有模板?
void func(T* itBegin, T* itEnd);
void main() {
T arr1[1];
func(std::begin(arr1), std::end(arr1));
T arr2[2];
func(std::begin(arr2), std::end(arr2));
}
我如何可以做到这一点的std ::阵列?
void func(??? itBegin, ??? itEnd);
void main() {
std::array<T,1> arr1;
func(std::begin(arr1), std::end(arr1));
std::array<T,2> arr2;
func(std::begin(arr2), std::end(arr2));
}
的问题是,在2010年MSVC,std::array<T,N>::iterator
是不同N
不同。这是MSVC 2010中的错误吗?如果不是,这个设计的基本原理是什么?是的,我可以从std ::数组中获取指针并传递它们而不是迭代器,但是这不是不必要的难看吗?
BTW,boost::array<T,N>::iterator
对于所有的N
都是相同的。
“无模板”是什么意思? – juanchopanza 2012-04-17 10:13:31
'void func(T * itBegin,T * itEnd)'已经是一个模板函数,所以我不能确定你如何遵守那个“没有模板”的要求。 – Gorpik 2012-04-17 10:32:16
@Gorpik:不,它不是模板。它只是使用一个带有不幸名字“T”的类型。参见'main',它也使用'T',不能模板化。 – MSalters 2012-04-17 11:27:17