【发布时间】:2018-08-13 12:34:58
【问题描述】:
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;
};
这是如何工作的?
【问题讨论】:
-
这称为聚合初始化。
-
请注意,此代码中的大多数名称都以下划线开头,后跟大写字母,因此保留供实现使用。不要在你的代码中使用它们。
标签: c++ c++11 templates predicate