gpt4 book ai didi

c++ - 评估 if ( std::function == function )?

转载 作者:行者123 更新时间:2023-12-05 01:24:37 25 4
gpt4 key购买 nike

如何计算给定的表达式(function == functor)。

代码示例:

#include <functional>
using namespace std;

void Foo() { }

int main() {

function<void()> a;
// if (a == Foo) -> error
}

编辑:调试细节,删除图片。

最佳答案

std::function::target()将检索指向存储的可调用对象的指针。这就是您要比较的内容。

您必须指定预期的存储类型,如果类型不匹配,target() 将返回 nullptr

(这意味着如果 std::function 持有一个函数指针,target() 将返回一个指向函数指针的指针。)

auto f = Foo; // This pointer existed in an earlier version of the question

if (*it->target<decltype(f)>() == f) { // Success

See it work in Compiler Explorer


请注意,因为 functions decay to function pointers :

*it->target< decltype(Foo) >() == Foo

不会工作,因为std::function 不可能持有函数Foo拷贝>。您需要衰减该函数,例如:

*it->target< std::decay_t<decltype(Foo)> >() == Foo

或:

*it->target< decltype(&Foo) >() == Foo

关于c++ - 评估 if ( std::function<void()> == function )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71352799/

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