C 配列を使用すると、任意のサイズの配列を使用するコードを非常に簡単に記述できます。
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::arrays でそれを行うにはどうすればよいですか?
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) );
}
問題は、MSVC 2010 では、std::array<T,N>::iterator
が異なると異なることN
です。これは MSVC 2010 のバグですか? そうでない場合、この設計の論理的根拠は何ですか? はい、std::array からポインターを取得して、反復子の代わりに渡すことはできますが、それは不必要に醜いことではありませんか?
ところで、boost::array<T,N>::iterator
すべて同じですN
。