gpt4 book ai didi

c++ - std::function 与 lambda 的比较

转载 作者:搜寻专家 更新时间:2023-10-31 00:57:12 25 4
gpt4 key购买 nike

如何比较 std::function 和 lambda?

#include <iostream>
#include <functional>
using namespace std;

int main()
{
using Type = void( float, int );
std::function<Type> a;
auto callback = []( float d, int r )
{
cout << d << " " << r << endl;
};
static_assert( std::is_same< Type , decltype( callback ) >::value, "Callbacks should be same!" );


a(15.7f, 15);
}

因为如果 lambda 的第一个参数是 int - 代码编译时会出现 1 个警告。如何保护代码?

最佳答案

回调 的类型不是一个简单的函数。没有捕获的 lambda 可以衰减为函数指针,但它不是函数指针。它是本地类的一个实例。

如果要确保 lambda 的特定函数类型,可以通过强制衰减为函数指针类型来实现:

#include <iostream>
#include <functional>
using namespace std;

int main()
{
using Type = void( float, int );
std::function<Type> a;
auto callback = []( float d, int r )
{
cout << d << " " << r << endl;
};

// Ensures desired type.
{
Type* const func_ptr = callback; (void) func_ptr;
}

a = callback;
a(15.7f, 15);
}

关于c++ - std::function 与 lambda 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891977/

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