std::not_fn
来自cppreference.com
< cpp | utility | functional
定义于头文件 <functional>
|
||
template< class F> /*unspecified*/ not_fn( F&& f ); |
(C++17 起) | |
构造一个转发调用包装器,返回其所保有的可调用对象的逻辑非。
参数
f | - | 构造包装器所保有的可调用 (Callable) 对象的来源对象 |
类型要求 | ||
-std::decay_t<F> 必须满足可调用 (Callable) 和 可移动构造 (MoveConstructible) 的要求。
| ||
-std::is_constructible_v<std::decay_t<F>, F> 要求为 true |
返回值
未指定类型 T 的函数对象。它拥有下列成员:
std::not_fn 返回类型
成员对象
std::not_fn
的返回类型保有一个 std::decay_t<F> 类型的成员对象。
构造函数
explicit T(F&& f); |
(1) | |
T(T&& f) = default; T(const T& f) = default; |
(2) | |
2) 因为 std::decay_t<F> 要求是可移动构造 (MoveConstructible) ,故返回的调用包装器始终为可移动构造 (MoveConstructible) ,并且若 std::decay_t<F> 为可复制构造 (CopyConstructible) ,则为可复制构造 (CopyConstructible) 。
成员函数 operator()
template<class... Args> auto operator()(Args&&... args) & -> decltype(!std::declval<std::invoke_result_t<std::decay_t<F>&, Args...>>()); |
(1) | |
template<class... Args> auto operator()(Args&&... args) && -> decltype(!std::declval<std::invoke_result_t<std::decay_t<F>, Args...>>()); |
(2) | |
1) 等价于 return !std::invoke(fd, std::forward<Args>(args)...)
2) 等价于 return !std::invoke(std::move(fd), std::forward<Args>(args)...)
其中 fd
是 std::decay_t<F> 类型的成员对象
异常
不抛出异常,除非 fd
的构造抛出异常。
注意
not_fn
的目的是取代 C++03 时代的取反器 std::not1 及 std::not2 。
参阅
(C++17 中弃用)(C++20 中移除) |
构造定制的 std::unary_negate 对象 (函数模板) |
(C++17 中弃用)(C++20 中移除) |
构造定制的 std::binary_negate 对象 (函数模板) |