当前位置:  开发笔记 > 编程语言 > 正文

如何用函数指针声明lambda(没有auto)?

如何解决《如何用函数指针声明lambda(没有auto)?》经验,为你挑选了1个好方法。

我可以轻松地声明匿名函数(它们与lambda相同,但没有"context" - [...])auto:

#include 

using namespace ::std;

void foo(void (*f)(char))
{
    f('r');
}

int main()
{
    void (*anon)(char) = [](char c) -> void { cout << c << endl; };
    foo(anon);
    return 0;
}

但是如何宣布lambda?这是唯一可能的方式吗?(也许使用typedef).我在这里使用::std::function,但我没有在foo参数中提到f的上下文...:

#include 
#include 

using namespace ::std;

//int foo(auto f, char x) // !only since c++14
int foo(function f, char x)
{
    return f(x+1);
}

int main()
{
    int a = 5, b = 10;

    //void (*lambda)(char) = [](char c) { cout << c << endl; };
    //auto sample_lambda = [&a,b](char c) -> int // !only since c++11
    function sample_lambda = [&a,b](char c) -> int  
        {
            for (;a

TartanLlama.. 5

你不能.

闭包的类型是一种唯一的,未命名的类型.你的第一个例子是有效的,因为闭包类型有一个转换函数指向函数的指针,如果它们没有捕获任何东西,不是因为闭包一个void (*) (char).

您最好坚持使用,auto因为std::function类型擦除会产生额外的开销.



1> TartanLlama..:

你不能.

闭包的类型是一种唯一的,未命名的类型.你的第一个例子是有效的,因为闭包类型有一个转换函数指向函数的指针,如果它们没有捕获任何东西,不是因为闭包一个void (*) (char).

您最好坚持使用,auto因为std::function类型擦除会产生额外的开销.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有