template<class _Fn,
enable_if_t<!_Pass_functor_by_value_v<_Fn>, int> = 0>
constexpr _Ref_fn<_Fn> _Pass_fn(_Fn& _Val)
{ // pass functor by "reference"
return {_Val};
}
该函数_Pass_fn
返回对象_Ref_fn<_Fn>
,但_Ref_fn
没有接受一个参数的构造函数。
template<class _Fx>
struct _Ref_fn
{ // pass function object by value as a reference
template<class... _Args>
constexpr decltype(auto) operator()(_Args&&... _Vals)
{ // forward function call operator
return (_Fn(_STD forward<_Args>(_Vals)...));
}
_Fx& _Fn;
};
这是如何工作的?
这是聚合初始化的变体。
可以在不定义构造函数的情况下使用成员值对简单结构进行大括号初始化:
struct Point {
int x;
int y;
};
...
Point p{1,2};