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)并调用已传递的函数?我得到&#34;候选人期望1个参数,0提供&#34;我不知道如何处理。
编辑:
我应该提到它,但我的目标是传递整数,但实际上我不知道如何。当我尝试这样的事情时:
void A::print(std::function<void(int a)> func)
{
func(a);
}
我得到&#34;错误:'a'未在此范围内宣布&#34;。
答案 0 :(得分:4)
如果您不打算将任何参数传递给func
,则应为std::function<void(void)>
。 void(int)
的签名意味着您打算为其提供一个整数,它将期望。而且你的代码显然没有提供必要的论证。
如果您打算将参数传递给func
,则它必须是A::print
的参数,如下所示:
void A::print(std::function<void(int)> func, int a) {
func(a);
}
您的尝试指定函数参数名为a
,这是没有实际意义的。由于a
中没有A::print
可供参考。以上也意味着您可以免除bind
:
a.print(&printInt, 3);
答案 1 :(得分:0)
你的bind()创建一个不带参数的函数,但是A :: print需要一个取1的函数。然后尝试调用该函数,就好像它不带参数一样。
答案是将A :: print改为采用不带参数的std ::函数。