gpt4 book ai didi

c++ - 使用 std::function 和 std::bind C++ 将带有参数的 void 方法传递给另一个方法

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

class A
{
public:
A() {}

void print(std::function<void(int)> func);

virtual ~A() {}
};

void A::print(std::function<void(int)> func)
{
func();
}

void printInt(int a)
{
std::cout << a << std::endl;
}

int main()
{
A a;

a.print(std::bind(&printInt, 3));

return 0;
}

假设我有这段代码示例。如何将 void 方法 printInt(int a) 传递给 A::print(std::function func) 并调用已传递的函数?我收到“候选人期望 1 个参数,提供 0 个参数”,我不知道如何处理。

编辑:我应该提到它,但我的目标是传递那个整数,但实际上我不知道如何传递。当我尝试这样的事情时:

void A::print(std::function<void(int a)> func)
{
func(a);
}

我收到“错误:‘a’未在此范围内声明”。

最佳答案

如果您不打算将任何参数传递给 func ,应该是std::function<void(void)> . void(int) 的签名意味着您打算向它提供一个整数,它会期望。而且您的代码显然没有提供所需的参数。


如果您打算将参数传递给 func ,需要是A::print的参数,像这样:

void A::print(std::function<void(int)> func, int a) {
func(a);
}

您尝试指定的函数参数名为 a这是没有实际意义的。因为没有 aA::print引用。以上也意味着你可以省去 bind :

a.print(&printInt, 3);

关于c++ - 使用 std::function 和 std::bind C++ 将带有参数的 void 方法传递给另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47732658/

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