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));