Cで関数シグネチャvoid qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
を使用したいが、私の比較関数のシグネチャはint (*compar)(const void *, const void*, const int)
である。クイックソート。1つの引数が定数のときにC内の関数ポインタのシグネチャを変更する
例として、異なるノルム(L0、L1、L2、およびLinifinityノルムなど)に従ってベクトル配列をソートしたいとします。実際にどの基準が比較関数に3番目の引数として渡されますが、qsort
の呼び出し中は一定のままです。
qsort(a, 100, sizeof(a), cmp2);
ような何かを呼び出すことができるように
//Function declaration for parametric comparison
int cmp3(int* a_vec, int* b_vec, int x);
// Somewhere in main
int (*cmp2)(int, int);
cmp2 = cmp3(int*, int*, 2);//2 could mean L2 norm
のような形で割り当てを行うことが可能である私は、これは動作しません知っているが、私はそれは私が何をしたいのアイデアを与える願っています達成する。また、異なる比較方法の数が大きすぎるため、異なる比較関数とqsortの呼び出しを行うことはできません。
を答えている(私は、スレッドの安全性を必要とする) – njg
@ForceBru私もグローバル変数について考えたが、それは醜いです、そして素晴らしいもの –
複数の比較関数を持ち、必要なものを渡すことができますか? –