我想知道我在这里做错了什么。这是我的代码示例。它只是一个粗略的代码示例,描述了函数指针的使用。在下面的例子中,函数指针接受一个参数。但是在函数指针赋值期间已经分配了该参数。现在为了调用函数指针我还需要提供一个参数值虽然该值是使用的(除非我使用std :: placeholder)。我的问题是我如何调用一个需要参数的函数指针,并且已经分配了参数而没有传入参数。
#include <iostream>
#include <functional>
using namespace std;
std::function<std::string(std::string)> fptr;
std::string foo()
{
return fptr(); //--->statement A - I need to invoke this funct ptr without passing a parameter as a parameter has already been assigned in statement B
}
std::string bar(std::string p)
{
return p;
}
int main()
{
fptr = std::bind(&bar,"Hello"); --->statement B
std::cout << foo();
}
std::bind
中的注意事项我没有使用任何占位符和&#34;您好&#34;是函数bar
的参数。我的问题是为什么
return fptr();
不行。如果我做以下
return fptr("Bye");
它起作用并返回&#34;你好&#34; 。 (在fptr调用期间没有传递参数的点)为什么没有参数它不起作用?
答案 0 :(得分:3)
std::bind
的结果允许您传递超出其需要的参数,并忽略这些额外的参数。在您的情况下,std::bind(&bar, "Hello")
可以不带参数调用,或者由fptr
声明,只有一个std::string
参数。
您的问题的解决方案很简单,只需将fptr
的类型更改为std::function<std::string()>
,它不接受任何参数并返回字符串。