c++ - 多态中的函数对象

标签 c++ sorting polymorphism function-object

我想按如下方式在多态性中实现功能对象:

#include <algorithm>
#include <iostream>

using namespace std;
struct Compare {
    virtual bool operator() (int, int) const = 0;
};
struct Less : public Compare {
    bool operator() (int i, int j)
        const {
        return (i < j);
    }
};
struct Greater : public Compare {
    bool operator() (int i, int j)
        const {
        return (i > j);
    }
};
void f(const Compare& c) {
    int arr[10] = { 4,2,6,7,1,3,5,9,8,0 };
    sort(arr, arr + 10, c);
    for (int i = 0; i < 10; ++i)
        cout << arr[i] << " ";
}
int main()
{
    f(Less());
    f(Greater());
}

但是它有一个错误消息“没有重载函数“sort”的实例匹配参数列表”

我认为抽象类不能有实例。 我该如何解决?

最佳答案

std::sort 想要复制排序函数。

有一个标准类可以“包装”引用并使其可复制; std::ref.

#include <memory>

... and then ...

sort(arr, arr + 10, std::ref(c));

关于c++ - 多态中的函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67467289/

相关文章:

c++ - 如何在c或c++中循环生成随机256位十六进制?

c++ - 初始化 vector 的 vector 的类构造函数

c++ - 每次使用 C++ 生成相同的 RSA key

python - 按文件名日期对日期进行排序

arrays - Bash 使用 += 将结果添加到数组

java - 如何测试 ViewGroup 的类型?

c++ - 使用 DFS 进行后序打印

javascript - 按两个值对数组进行排序

c++ - 如何在堆栈上创建多态对象?

c++ - 将多态 unique_ptr 作为参数传递时发生内存泄漏