は、任意のサイズのアレイを取るコードを書くことは非常に簡単です:std :: array iteratorテンプレートなしの範囲ですか? 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 ::アレイとすることを行うことができますか?
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からポインタを取得し、イテレータの代わりにそれらを渡すことができますが、それは不必要に醜いものではありませんか?
BTW、boost::array<T,N>::iterator
はすべてN
で同じです。
「テンプレートなし」とはどういう意味ですか? – juanchopanza
'void func(T * itBegin、T * itEnd)'はすでにテンプレート化された関数なので、 "テンプレートなし"の要件にどう対応することができません。 – Gorpik
@Gorpik:まあ、いいえ、テンプレート化されていません。それはちょうど 'T'という不幸な名前のタイプを使用します。 'main'も参照してください。' main'も 'T'を使用しており、テンプレート化することはできません。 – MSalters