4
我正在处理堆实现。它必须是模板类,我需要它有自己的比较器,通过构造函数传递。我该怎么做?模板类中的比较器
我已经试过这样:
template <typename T>
class Heap{
public:
Heap(int size, bool (*comparator) (const T & a, const T & b) = [] (const T & a, const T & b){
return a < b;
})
// other unimportant methods
}
这对于工程:
Heap<int> heap(4);
,也为:
Heap<int> heap(4, [](const int & a, const int & b){ return false; })
但是当我尝试用这样的指针使用(其中报价是某种结构):
Heap<Offer*> heap2(3, [](Offer const * a, Offer const * b){
return false;
});
我得到这个编译错误:
test.cpp: In function ‘int main()’:
test.cpp:126:3: error: invalid user-defined conversion from ‘main()::<lambda(const Offer*, const Offer*)>’ to ‘bool (*)(Offer* const&, Offer* const&)’ [-fpermissive]
});
^
test.cpp:124:59: note: candidate is: main()::<lambda(const Offer*, const Offer*)>::operator bool (*)(const Offer*, const Offer*)() const <near match>
Heap<Offer*> heap2(3, [](Offer const * a, Offer const * b){
^
test.cpp:124:59: note: no known conversion from ‘bool (*)(const Offer*, const Offer*)’ to ‘bool (*)(Offer* const&, Offer* const&)’
test.cpp:13:5: note: initializing argument 2 of ‘Heap<T>::Heap(int, bool (*)(const T&, const T&)) [with T = Offer*]’
Heap(int size, bool (*comparator) (const T & a, const T & b) = [] (const T & a, const T & b){
如何使它两种情景工作?
尝试'发售* const的和在不工作的拉姆达的参数'。 – Brahim
或使用仿函数。 – user3063349
函子在某些方面更好吗? – tomascapek