c ++将类成员函数指针传递给另一个函数

时间:2014-08-07 08:19:14

标签: c++ class templates vector member-function-pointers

我在互联网上搜索并找到了一些解决方案,但我不想改变我的整个代码。 我想在vector<my_class *>中搜索不同的对象,所以我写了这个,但它不起作用:

static vector <attendant *> attendant_vec;
template<typename T, typename R>
int binary_search(int first_cell, int last_cell,int search_key, vector<T*>& v, R (T::*func)(void), void *sort){
    int index;
    quicksort(v, v.size(), 0, sort);
    if(first_cell > last_cell)
        return -1;
    else {
        int middle = (first_cell + last_cell)/2;
        if(search_key== v.at(middle).*func())
            index=middle;
        else
            if(search_key< v.at(middle).*func())
                index=binary_search(first_cell, middle-1, search_key, v, func,sort);
            else
                index=binary_search(middle+1, last_cell, search_key, v, func,sort);
    }
    return index;
}

void my_function() {
    int u = binary_search(0,attendant_vec.size(),12,
            attendant_vec,&attendant::get_personal_code,
            &sort_by_personal_code);//ERROR
    cout<<u;
}

我有这些错误:

  

此行有多个标记

     
      
  • 没有匹配函数来调用'binary_search(int,std :: vector :: size_type,int,std :: vector&amp;,int   (服务员:: )()const,bool()(服务员*,服务员*))'
  •   
  • 候选人是:
  •   
  • 推断出参数'_FIter'('int'和'long unsigned int')的冲突类型
  •   
  • types'R(T ::)()'和'int(attendant ::)()const'具有不兼容的cv-qualifiers
  •   

1 个答案:

答案 0 :(得分:0)

您可以按如下方式使用std::binary_search

void my_function() {
    int u = std::binary_search(attendant_vec.begin(), attendant_vec.end(), 12, &sort_by_personal_code);
    std::cout << u;
}