c++ - std::function 函数作为默认参数
问题描述
我有这个方法头:
void Find(const _T & v, int max, const function<bool(const _E &)> & filter)
我使用std::function
是因为我需要接受函数指针、仿函数或 lambda 表达式。我希望过滤器是可选的,并且默认为始终返回 true(没有被过滤掉)作为默认参数的函数。我试过这样的事情:
#include <functional>
template <typename E>
bool alwaystrue(const E & e){ return true; }
template <typename T, typename E>
void Find(const T & v, int max,
const std::function<bool(const E &)> & filter = alwaystrue);
int main()
{
Find<int, int>(1, 2);
}
但这不会编译:
50016981.cpp: In function ‘void Find(const T&, int, const std::function<bool(const E&)>&) [with T = int; E = int]’:
50016981.cpp:11:24: error: cannot resolve overloaded function ‘alwaystrue’ based on conversion to type ‘const std::function<bool(const int&)>&’
Find<int, int>(1, 2);
^
我也尝试在我的班级中使用该功能,但遇到了类似的错误。
std::function
与模板结合有问题吗?如果是这样,你能建议如何做我想做的事吗?我想避免重载Find()
函数(如果可能的话),所以我没有重复的代码。
解决方案
您需要指出alwaystrue
要使用哪个实例作为默认值,即alwaystrue<E>
:
template <typename T, typename E>
void Find(const T& v, int max,
const std::function<bool(const E&)>& filter = alwaystrue<E>);
推荐阅读
- python - 对 dicts 使用 bot 命令
- python - 人脸编码的形状不同
- typescript - 无法在 ECS 计划任务 (aws-cdk) 中使用现有日志组
- r - 对使用仅应用于数字列的 mutate 和 rollmean 函数在 R 中有效地创建新列感到困惑
- python - 避免包重新上传到 PyPI
- react-native - 检测 react-router-native 中的路由变化
- python - 应用引用多列的 groupby 的最快最有效方法
- python - 每当我在“基本”环境中启动 Anaconda Prompt 时,有关 VSINSTALLDIR 和 vs2019 的长错误消息
- postgresql - TypeORM - 从现有实体生成迁移
- node.js - NodeJS - 如果请求来自特定的 URL 或主机,则表示接受请求