【发布时间】:2019-09-04 15:08:45
【问题描述】:
我想在我的函数中为函子参数设置一个默认 lambda。
我知道可以像这样使用struct 和operator():
struct AddOne {
int operator()(int a) {
return a+1;
}
};
template <typename Functor = AddOne>
int run_old(int x, Functor func = AddOne())
{
return func(x);
}
但我想知道,考虑到 c++14/17/20 中标准的变化,是否有一种现代方式来完成这项工作?
template <typename Functor>
int run_new(int x, Functor func = [](int a){ return a+1; })
{
return func(x);
}
我不确定将使用什么作为 Functor 的默认类型,或者是否有我不知道的语法。
【问题讨论】:
-
"现代方式" 旧方式有什么问题? struct 方法在函数站点更容易阅读。
-
在旧方式中,您可能不希望以这种方式同时提供默认模板和函数参数:wandbox.org/permlink/PtSwiQwsNDyDrshu。请改用
Functor func = Functor()。
标签: c++ lambda c++14 c++17 template-argument-deduction