では,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