如何在C++中为运算符分配std :: function?

Ken*_*ron 2 c++ templates operators function-object c++11

template<class Key, class Value>
AVLTree<Key,Value>::AVLTree(){
    this->lessThan = Key::operator<;
}
Run Code Online (Sandbox Code Playgroud)

此代码应该使std::function<bool(Key, Key)> lessThan字段默认等于键的<运算符.但是,当我尝试这个时AVLTree<int,int>,我得到:

error: ‘operator<’ is not a member of ‘int’
Run Code Online (Sandbox Code Playgroud)

我是格式化这个错误,还是在C++中这是不可能的?

Bri*_*ian 8

C++中没有预先存在的函数可以对ints 执行比较.此外,即使Key是类类型,您也无法知道它是成员还是非成员operator<.

以下是一些替代方案:

  1. std::less,

    this->lessThan = std::less<Key>();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用lambda:

    this->lessThan = [](const Key& k1, const Key& k2){ return k1 < k2; };
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果您的设计AVLTree类似于标准库容器,则比较对象的类型应该是一个类型模板参数,Comp默认为std::less<Key>在构造函数中传递实例,默认为Comp().