【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
■ このスレッドは過去ログ倉庫に格納されています
0512デフォルトの名無しさん
2006/11/05(日) 15:09:54>>510
15通りの比較関数の代わりに、一つの比較関数でやれば宜しい。
そのためには、比較関数で参照できるようなフラグを用意すればいい。
Ex.
struct {
enum {CompColNone, CompColA, CompColB, CompColC} Col1st, Col2nd, Col3rd;
} gComp;
int hogeComp(const void * a, const void * b)
{
const hoge * lhs = (const hoge *) a;
const hoge * rhs = (const hoge *) b;
switch (gComp.Col1st) {
case CompColA:
if (lhs->a > rhs->a) return 1;
if (lhs->a < rhs->a) return -1;
break;
case CompColB:
if (lhs->b > rhs->b) return 1;
if (lhs->b < rhs->b) return -1;
break;
case CompColC:
if (lhs->c > rhs->c) return 1;
if (lhs->c < rhs->c) return -1;
break;
}
// 以下同様に2nd、3rdも処理
return 0;
}
// こういう泥臭い実装が嫌ならC++に移行してしまえ
■ このスレッドは過去ログ倉庫に格納されています