一部分だけ異なる似たような処理を、簡潔かつ実行速度が速くなるように
記述する方法ってありませんか?

2次元配列に対して処理を行う関数を複数作りたいと思っています。
例えば以下の関数sumは配列の合計を出す関数です。(変数宣言などは省略)

int sum(){
 
 (前処理)
 
 for(r = 0; r < nRow; r++){
  for(c = 0; c < nCol; c++){
   s += cell[r,c]; … (1)
  }
 }
 
 (後処理)
 
 return s;
}

似た形として、平均値を出す関数や配列の中身をインクリメントする関数など、
(1)の部分だけが異なる関数をたくさん作りたいと思っています。
ただ、(1)の部分だけ違う関数を作るにはこのままではループ部分や前処理・後処理も
記述しないといけません。

新しく関数を付け加えたいとき、できれば(1)の部分だけ書けばいいような形に
したいのですが何かいい方法がありませんか?
なお、ループの回数が多いため(1)の部分は関数呼び出しの形にはしたくないです。
(コンパイルしてインライン展開されるならok)