c++ - 使用模板排序的默认谓词。C++
问题描述
我正在尝试定义类模板,如下所示
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 是非法的。
解决方案
你可能想要这样做:
template <typename type, typename PRED = std::greater<T>>
void push(type e, PRED comp = PRED()) {
// ...
}
用作std::greater<T>
默认模板参数,这样即使T
is not也能正常工作int
。
用作参数PRED()
的默认值comp
,这样即使用户指定了其他一些可默认构造的谓词类型(例如std::less<T>
.
推荐阅读
- javascript - 动态调整文本输入框宽度以适应 reactjs
- java - 总是返回null时的junit5 mockito jdbctemplate
- python - 使用 Windows 调度程序时 Python 脚本找不到文件
- odbc - [Snowflake-ODBC]无法使用 SQLColumns API 成功获取列信息
- java - 如何更改菜单标题颜色android java
- python - 使用循环分支 Apache Beam 管道
- java - 在 Java 中使用 SOAP 工件
- spring-boot - 我可以对两个表使用完全相同的实体 JPA HIBERNATE
- cucumber - 将 cucumber-jvm 从版本 4 升级到版本 6 时是否需要额外的上下文配置?
- asp.net-core - 通过 Blazor WASM 使用 Spotify 身份验证