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++中这是不可能的?
C++中没有预先存在的函数可以对ints 执行比较.此外,即使Key是类类型,您也无法知道它是成员还是非成员operator<.
以下是一些替代方案:
用std::less,
this->lessThan = std::less<Key>();
Run Code Online (Sandbox Code Playgroud)使用lambda:
this->lessThan = [](const Key& k1, const Key& k2){ return k1 < k2; };
Run Code Online (Sandbox Code Playgroud)如果您的设计AVLTree类似于标准库容器,则比较对象的类型应该是一个类型模板参数,Comp默认为std::less<Key>在构造函数中传递实例,默认为Comp().
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |