【发布时间】:2019-11-27 20:00:53
【问题描述】:
我正在尝试定义如下所示的类模板
template <typename T> class test{
std::list<T> container;
public:
template <typename type, typename PRED = std::greater<int>>
void push(type e, PRED comp = std::greater<int>) {
container.push_back(e);
container.sort(comp);
}
};
从 main 我希望能够告诉 sort 应该如何进行排序。但如果没有指定,我也想排序使用 std::greater 。上面的代码告诉我 std::greater 是非法的。
【问题讨论】:
-
std::greater位于functional标头中。你还记得#include <functional>吗? -
std::greater<int>是 class 不是默认参数所需的实例。由于PRED类型已经是正确的类型,您可以使用PRED()作为默认参数的对象。 -
应该是
PRED comp = std::greater<int>{}。 -
对于未来的问题,请阅读how to ask good questions 和this question checklist,并尝试创建一个合适的minimal reproducible example 向我们展示。并包括您从构建中获得的所有错误,完整复制粘贴为文本。
标签: c++