使用函数和函子交替使用 - C ++

时间:2015-09-18 15:02:37

标签: c++ stl

使用copy_ifcount_if等许多算法,我可以在需要谓词的地方互换使用函数或函子。

但是对于std::set,我无法传递函数来代替它所采用的比较函数参数。在这种情况下,我必须传递一个仿函数。为什么它不接受某个功能呢?

bool myfunction (int lhs, int rhs) {
    cout << "myfunction\n";
    return true;
}

struct myfunctor {
    bool operator() (const int& lhs, const int& rhs) const {
        cout << "myfunctor\n";
        return true;
    }
};

std::set<int,myfunctor> first;  
std::set<int,myfunction> second;  // this does not compile.

1 个答案:

答案 0 :(得分:4)

  

为什么不接受功能?

那是因为std::set第二个模板参数应该是一个类型。具体来说,它应该是比较的仿函数类型。您正在传递一个函数(指针),它不是一个类型。