gpt4 book ai didi

c++ - 在 C++ 中,我们如何使用执行函数的有效 X(Args...) 语法调用所有内容?

转载 作者:行者123 更新时间:2023-11-30 05:34:48 24 4
gpt4 key购买 nike

在 C++ 中,有一个 Callable 概念以及 std::is_function 类型特征。我想知道标准如何调用 X,当确切的表达式

X(Args...)

有效并对应于一个调用(不包括构造函数和 C 宏)。现在,我可以想到以下适合该类别的内容:

  • 函数:R(Args...)(带有可选的constvolatile&&& 限定词)
  • 函数指针:R(*)(Args...)
  • 函数引用:R(&)(Args...)
  • 仿函数(具有重载的operator() 的结构/类)
  • lambda

我的问题:

  1. 标准如何调用 X? (例如:不是 is_function 类型,因为如果 X 是函数指针,则 X(Args...) 有效但 is_function 为假)
  2. 我是否忘记了 list 中的内容?

最佳答案

您的问题似乎有点困惑。 std::is_function 仅标识 actual function types .它甚至不包括指向函数的指针FunctionObject concept包括您可以应用函数调用运算符的任何对象类型。这基本上涵盖了您的列表。

Callable concept包括 FunctionObjects,但它还包括其他东西。 Callable 将成员指针(包括数据和函数)添加到 FunctionObject 系列的其余部分。

C++ 的 INVOKE 特性适用于所有 Callable 对象。 INVOKE 实际上不是 C++ 中的函数;它只是使用参数列表调用 Callable 对象的算法的标准名称(C++17 纠正了这种荒谬的监督,给了我们 std::invoke)。该标准的第 20.9.2 节详细介绍了该算法的实现方式。

一般要点就是您所期望的。如果可调用对象是指向成员数据的指针,那么您采用第一个参数,并将其应用于指向成员数据的指针(如果它不是指针,则取消引用该参数)。指向成员函数的指针也是如此,只是您将其余参数作为参数传递。

对于 FunctionObject 类型,您只需使用 () 调用它,将参数传递给它。

关于c++ - 在 C++ 中,我们如何使用执行函数的有效 X(Args...) 语法调用所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34096011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com