私はthrought T.1 CppCoreGuidelinesのつもりだし、次の例があるコードの抽象度を上げるためのテンプレートの使用?例上記のガイドラインを1として
例1
template<typename T>
// requires Incrementable<T>
T sum1(vector<T>& v, T s)
{
for (auto x : v) s += x;
return s;
}
例2
template<typename T>
// requires Simple_number<T>
T sum2(vector<T>& v, T s)
{
for (auto x : v) s = s + x;
return s;
}
は概念的には悪いですそれは一般化(「増やすことができる」または「追加することができる」という低レベルの概念に制約される)の機会を見逃したためです。
一般化されたテンプレートと呼ばれるためには、上記のテンプレートをどのように表現できますか?
なぜ 's = std :: accumulate(std :: begin(v)、std :: end(v)、s)'を使わないのですか?標準コンテナ(およびバニラCスタイルの配列)で動作し、 's'に依存せず、' v'の要素も同じ型です(追加する必要はありますが)。私はそれがあなたの例よりもはるかに一般的であることを示唆しています - そして、 'std :: accumulate()'は他のものにも使用できます。 – Peter