07/03/18 23:56:17
引数がvectorでも組み込みの配列でも動作する、平均値を返す関数を書くべく、
引数を反復子(ポインタ)にして
template<class Ran>
double average(const Ran& begin, const Ran& end){ (略) }
と定義したのですが、関数呼び出し部分で
double av_arr[] = {10, 20, 30, 10};
size_t av_arr_size = sizeof(av_arr) / sizeof(*av_arr);
double x = average(av_arr, av_arr + av_arr_size);
としたところ、
「テンプレート のパラメータ 'Ran' があいまいです。
'double *' の可能性があります。または 'double [4]'」
とコンパイラ(VC2005)にダメ出しされてしまいます。
average(av_arr + 0, av_arr + av_arr_size);
とすれば共にポインタとして認識してくれるようですが、
読んだ本には、「配列の名前を添え字なしで使うと配列の先頭のポインタが渡される」と書いていたので、
元のままだと何が悪いのかよくわかりません。
"double [4]"って何の型?? みたいな話もあるんですが、
解説とスマートな解決策をご教授願えれば幸いです。