Listクラスのオブジェクトを並べ替えるために使用しているジェネリック関数があります。
この関数は非常にうまく機能しますが、そのクラスのメンバー関数への関数ポインターを使用してこの関数をクラスに適用したい場合、ビルドされません。
関数は次のとおりです。
template <typename T1, typename T2, typename T3>
void DialogFaitListing::trie(T1 * list, T2 (T1::*fx)(quint16), T3 (T2::*crit)())
{
for(int i(0);i<list->count();i++)
{
for(int j(i);j<list->count();j++)
{
if((((list->*fx)(i)).*crit)() > (((list->*fx)(j)).*crit)())
{
list->swap(i,j);
}
}
}
}
ここで、listはオブジェクトのリストを含むクラス、fxはオブジェクトにアクセスするための関数ポインター、critはソート用のオブジェクト比較関数です。
この行を使用してビルドする場合:
trie(vend,&Vendeurs::getVend,&Vendeur::getNom);
このエラーが発生します:
dialogfaitlisting.cpp:459: erreur : no matching function for call to
'DialogFaitListing::trie(Vendeurs*&, Vendeur (Vendeurs::*)(quint16),
QString (Personne::*)())'
ps:私の悪い英語でごめんなさい