C++ 如何使用C+中的通用向量对动态内存中的对象列表进行排序+;?

C++ 如何使用C+中的通用向量对动态内存中的对象列表进行排序+;?,c++,templates,C++,Templates,我有一个向量类模板,它有一个成员函数,该函数使用指向函数的指针: template <class T> void VecGenerico<T>::order(int fin, bool (*compare)(T,T)) //orders the vector { for (int i=0;i<fin;i++) { for (int j=i;j<fin;j++) { if ((*

我有一个向量类模板,它有一个成员函数,该函数使用指向函数的指针:

template <class T>
void VecGenerico<T>::order(int fin, bool (*compare)(T,T)) //orders the vector
{
    for (int i=0;i<fin;i++)
    { 
         for (int j=i;j<fin;j++)
         {
               if ((*compare)(vector[i],vector[j])) //generic procedure
                   swap(vector[i],vector[j]);
         }
    }
}

如何正确地将
compareArticulos
传递到
lista.order()

在您的
order
成员函数中(为了一致性,应该真正调用
sort
),您将
compare
定义为函数指针:

template <class T>
void VecGenerico<T>::order(int fin, bool (*compare)(T,T))
不能将成员函数转换为函数指针。但是,
compareArticulos
中没有任何内容以任何方式引用
,因此一种解决方案是简单地将其设置为
静态
静态
成员函数可以转换为函数指针。这样,您可以:

lista.order(indice, compareArticulos);
更一般地说,您应该选择任何类型的比较器作为参数:

template <class T>
template <class Compare>
void VecGenerico<T>::order(int fin, Compare compare);
lista.order(indice, compareArticulos);
template <class T>
template <class Compare>
void VecGenerico<T>::order(int fin, Compare compare);
lista.order(indice, std::bind(&Tienda::compareArticulos, this));