命名空间
变体
操作

std::invocable (自 C++20 起), std::regular_invocable (自 C++20 起)

来自 cppreference.com
< cpp‎ | 概念
定义在头文件 <concepts>
template< class F, class... Args >

concept invocable =
    requires(F&& f, Args&&... args) {
        std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
            /* 不需要是等价保留的 */

    };
(自 C++20 起)
template< class F, class... Args >
concept regular_invocable = std::invocable<F, Args...>;
(自 C++20 起)

invocable 概念指定可调用类型 F 可以使用函数模板 std::invoke 调用一组参数 Args...

regular_invocable 概念在 invocable 概念的基础上增加了要求,即 invoke 表达式必须是 等价保留的,并且不会修改函数对象或参数。

内容

[编辑] 等价保留

标准库概念中 requires 表达式 中声明的表达式要求是 等价保留的(除非另有说明)。

[编辑] 说明

invocableregular_invocable 之间的区别纯粹是语义上的。

随机数生成器可能满足 invocable,但不能满足 regular_invocable滑稽的 除外)。

[编辑] 参考资料

  • C++23 标准(ISO/IEC 14882:2024)
  • 18.7.2 概念 invocable [concept.invocable]
  • 18.7.3 概念 regular_invocable [concept.regularinvocable]
  • C++20 标准(ISO/IEC 14882:2020)
  • 18.7.2 概念 invocable [concept.invocable]
  • 18.7.3 概念 regular_invocable [concept.regularinvocable]

[编辑] 另请参阅

检查类型是否可以使用给定的参数类型调用(如同使用 std::invoke)。
(类模板) [编辑]

[编辑] 外部链接

1.  一个 笑话例子,一个随机数生成器,满足 invocableregular_invocable