C++ 接受 lambda 作为多个方法的参数

问题描述 投票:0回答:1

在文件

test.hpp
中,我正在定义具有 3 个方法的 Test 类。 我还将回调类型定义为返回
bool
并接受
char
int
参数的函数。

#include <iostream>

// Defining function that takes char, int and return bool.
typedef bool (*Callback)(char, unsigned int);

using namespace std;

class Test{
public:
    void methodOne(Callback f);
    void methodTwo(Callback f);
    void methodThree(Callback f);
};

test.cpp
包含方法的实现:

#include "test.hpp"

void Test::methodOne(Callback f){
    f('A', 1);
}

void Test::methodTwo(Callback f){
    f('B', 2);
}

void Test::methodThree(Callback f){
    f('C', 3);
}

main()
中,如果 lambda 函数没有捕获
[]
中的任何参数,我可以传递它。

int main(){

    Test obj;
    int var = 100;

    auto lambda = [/* var */](char c, unsigned i)->bool{
        cout << c << " " << i << endl;

        return true;
    };

    obj.methodOne(lambda);
    obj.methodTwo(lambda);
    obj.methodThree(lambda);

    return 0;
}

如何声明三个方法来接受可以捕获变量

var
的回调lambda函数?
test.hpp
处的声明和
test.cpp
处的定义所有 3 个方法的语法是什么?

我尝试了这个,但没有编译:

auto lambda = [var](char c, unsigned i)->bool{
    cout << c << " " << i << endl;

    return true;
};

重复的链接没有回答问题。我的问题不是如何使用函数指针通过捕获接受 lambda。我的问题是我想替换函数指针定义

Callback
,这样我就可以将捕获的 lambda 传递给它。

c++ lambda
1个回答
0
投票

首先,没有必要重新打开这个问题,因为欺骗中的现有答案已经回答了这个问题。


我的问题是我想替换函数指针定义回调,这样我就可以将捕获的 lambda 传递给它。

重复中所述,一种方法是使用

std::function
来实现此目的。特别是,使
Callback
成为使用
std::function
而不是函数指针的 typedef,如下所示。

//only changed this everything else if exactly the same
using Callback = std::function<bool(char, unsigned)>;

工作演示

© www.soinside.com 2019 - 2024. All rights reserved.