c ++

时间:2016-08-25 02:00:10

标签: c++

我得到了如下代码片段,它构建了:

#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)

1 个答案:

答案 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