多态性中的功能对象



我想在多态性中实现函数对象,如下所示:

#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());
}

但是它有一个错误消息";没有重载函数的实例";排序";匹配参数列表";

我认为抽象类不能有实例。我该怎么修?

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

存在一个标准类;"包装";引用并使其可复制;CCD_ 2。

#include <memory>
... and then ...
sort(arr, arr + 10, std::ref(c));

std::sort按值取比较器参数;你不能向它传递像Compare这样的抽象类。你可以直接向它传递LessGreater

您可以制作f模板、

template <typename C>
void f(const C& 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] << " ";
}

然后将CCD_ 8或CCD_

f(Less());
f(Greater());

实时

相关内容

  • 没有找到相关文章

最新更新