我为什么要这样做:

stable_sort(it1, it2, binary_function);

但不是这个:

priority_queue<type, vector<type>, binary_function> pq;

为什么我可以在第一种情况下使用函数,但是在第二个情况下需要一个对象?

有帮助吗?

解决方案

如果您查看参考 std::stable_sort, ,您会看到 binary_function 您提供的,也应该是一个函数对象...两者之间没有区别,除了在第二种情况下可能没有正确的“ cast”或从函数到适当函数对象的转换。

我相信这可能是由于以下事实 *sort 函数直接使用函子,因此,如果函数地址有效,则 *sort 调用功能,它将在函数调用的持续时间内有效。当创建将其用作数据成员的容器(本质上)时,您无法确定该功能参考在容器对象的生命周期内会无效。我知道这是一个松散的手动阐释,但这是我能想到的最好的。也许在C ++中,对二进制函数的引用将被隐含地转换为构造 std::function 因此,该函数被“复制”,并且没有有效性问题。

我希望我现在还没有失去你...

其他提示

priority_queue 是一个模板,它期望一种类型作为参数,在哪里 binary_function 是功能对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top