这可以用 lambda 函数来完成吗?

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

我使用 C# 开发已经超过 15 年了,现在我开始使用 C++ 开发。

我的问题是我试图理解 C++ 中的回调或函数指针。我认为下面的例子是我必须如何在方法中使用函数指针

MyClass:MyMethod
:

// callback function 
int foo(char x) { [...] } 

void MyAnotherClass::AnotherMethod(int a, int b, int(*func_ptr)(char))
{
    // Compute x using parameters a and b.
    char x = [ ... ];
    
    int e = func_ptr(x);
}

void MyClass:MyMethod(int a, int b, int c, int d)
{
    MyAnotherClass::AnotherMethod(a, b, &foo);
}

但是,我需要使用

foo
而不是
foo2
函数:

int foo2(char x, int c, int d) { [...] } 

参数

c
d
与方法
void MyClass:MyMethod(int a, int b, int c, int d)
中的参数相同。

一个选项可以是将这些参数传递给方法

MyAnotherClass::AnotherMethod
,并在该方法内,将它们传递到此处
int e = func_ptr(x, c, d);
。类似这样的东西:

void MyAnotherClass::AnotherMethod(int a, int b, int c, int d, int(*func_ptr)(char, int, int))
{
    // Compute x using parameters a and b.
    char x = [ ... ];
        
    int e = func_ptr(x, c, d);
}

但是我想知道是否有可能不将参数

c
d
传递给方法
MyAnotherClass::AnotherMethod
,而是将它们传递给
MyClass:MyMethod
中的函数指针。也许使用 lambda 函数。

这可能吗?

我不知道 lambda 函数是不是解决方案。

c++
1个回答
0
投票

不要使用函数指针,而是使用

std::function<int(char)>

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