我得到了如下代码片段,它构建了:
#include <functional>
typedef std::function<void(int)> ReadCallback;
void falseRead() {}
int main()
{
ReadCallback callback = std::bind(falseRead);
}
ReadCallback的签名是void(int)
,而falseRead的签名是void()
。如何进行分配?
如果我使用callback
对象来调用该函数,我应该使用哪个语句callback()
或callback(0)
?
答案 0 :(得分:2)
bind-expression可以使用任意数量的参数调用;与占位符不对应的参数将被丢弃。
auto f = std::bind(falseRead);
f(a, b, c); // equivalent to falseRead();
因此,您的bind-expression可用于构造std::function<void(int)>
对象:
std::function<void(int)> g = f;
g(a); // = f(a) = falseRead()
这是禁止的相反方向:如果绑定函数接受参数,则必须为参数提供值(绑定值或占位符):
void realRead(int fd, char* buf);
auto h = std::bind(realRead, _1, buf); // h(fd) = realRead(fd, buf)
// auto h = std::bind(realRead); // error