gpt4 book ai didi

c++ - 无法为 std::less/std::greater 实例化 binary_function

转载 作者:太空狗 更新时间:2023-10-29 21:03:51 30 4
gpt4 key购买 nike

我正在尝试编写一个函数来打印 minheap 和 maxheap 的内容,但我在使用比较器时遇到了问题。我尝试使用三元运算符,但它不起作用,因为 std::less 和 std::greater 是不同的类型。我尝试使用比较器的方式有什么问题?

#include <functional>
template<typename T> void printheap (T* v, int begin, int end, bool max) {
end--;

std::binary_function<T,T,bool> comp;
if (max) comp = less<T>();
else comp = greater<T>();

while (end>=begin) {
cout << v[begin] << " ";
pop_heap(&v[begin], &v[end+1], comp );
end--;
}
cout << endl;
}

链接错误:

/usr/include/c++/4.6/bits/stl_heap.h:305:4: error: no match for call to ‘(std::binary_function<int, int, bool>) (int&, int&)’


编辑:

我也试过使用 binary_function 指针并在堆上分配,现在我得到了一个不同的错误:

template<typename T> inline void printheap (T* v, int begin, int end, bool max) {
...
std::binary_function<T,T,bool> *comp;
if (max) comp = new less<T>();
else comp = new greater<T>();
...
pop_heap(&v[begin], &v[end+1], (*comp) );
...
delete comp;
}

错误:

/usr/include/c++/4.6/bits/stl_heap.h:305:4: error: ‘__comp’ cannot be used as a function

最佳答案

您是 object slicing 的受害者.

当您分配 less<T> 时或 greater<T>binary_function类型,operator()他们定义的消失了。

来自 my favorite reference :

binary_function does not define operator(); it is expected that derived classes will define this. binary_function provides only three types - first_argument_type, second_argument_type and result_type - defined by the template parameters.

你应该通过 less<T>greater<T>直接在。您也可以使用 pointer_to_binary_function , 但它们在 C++11 中都已弃用,取而代之的是 function .

关于c++ - 无法为 std::less/std::greater 实例化 binary_function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12984145/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com