gpt4 book ai didi

c++ - 如何理解is_callable定义?

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:41 24 4
gpt4 key购买 nike

在 ISO C++ 标准规范草案 N4606 中,§20.15.6,is_callable定义如下:

template <class Fn, class...ArgTypes, class R>
struct is_callable<Fn(ArgTypes...), R>

The expression INVOKE(declval<Fn>(),declval<ArgTypes>()...,R) is well formed when treated as an unevaluated operand.

据我了解Fn(ArgTypes...)是返回 Fn 的函数的签名并作为参数 ArgTypes... .

所以 INVOKE(declval<Fn>(),...)会尝试调用函数的返回值吗??

那么is_callable的目标是什么? ?或者我哪里弄错了?

最佳答案

根据我的理解,std::is_callable 将回答是否可以使用 ArgTypes... 实例调用 Fn 实例的问题作为参数,如果此调用将导致 R 类型的对象。

举个例子:

#include <type_traits>

struct A {
int operator()(int, float, double) { return 0; }
};

int main() {
static_assert(std::is_callable<A(int, float, double), int>::value, "!");
static_assert(!std::is_callable<A(int, int), int>::value, "!!");
}

[live demo]

关于c++ - 如何理解is_callable定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40959503/

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