関数ポインタの使いどころ

では,2点目の似ている処理を纏める事についてカキカキ(ソートがしたい訳じゃないので,真面目にソートしていないです)
main.cpp
—————————————————————————————
 #include <iostream>

 struct STUDENT
 {
         int Number;
         int Born;
         int en_Seiseki;
 };
   
 bool sort_by_number(STUDENT datax, STUDENT datay)
 {
          if(datax.Number > datay.Number)
          {
                   return true;
          }
          return false;
 }

 bool sort_by_born(STUDENT datax, STUDENT datay)
 {
          if(datax.Born > datay.Born)
           {
                  return true;
           }
           return false;
 }

 bool sort_by_en(STUDENT datax, STUDENT datay)
 {
            if(datax.en_Seiseki > datay.en_Seiseki)
           {
                    return true;
            }
            return false;
 }

 void sort(STUDENT * data, bool (*psort)(STUDENT, STUDENT), int size)
 {
          for(int i = 0; i < size – 1; i++)
           {
                  if(psort(data[i], data[i+1]))
                  {
                         STUDENT temp = data[i];
                         data[i] = data[i+1];
                         data[i+1] = temp;
                  }
          }
 }

 int mainFunction()
 {   
         STUDENT st[5] = {    
                  {0, 4, 5},    {1, 5, 3},    {2, 9, 4},    {3, 3, 1},    {4, 12, 2} 
         };      
          sort(st, sort_by_en, 5);
          return 0;
 }
—————————————————————————————
注目点はここ↓
sort(st, sort_by_en, 5);
ここでは,関数呼び出しを行っていますね。
stは構造体の配列
sort_by_enが関数アドレス
5は只の大きさですね

そして,psort(data[i], data[i+1]) ここで
sort_by_en関数を呼び出しています。
判定部分を,関数に任せ 処理部分を1か所にだけ書くことで
似ている処理を纏めることに成功しています。

大したことはしていないので,コメントは書いてないです。
さぁこれで君も,関数ポインタマスターだ!(あんまり嬉しくないw

comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*