在回答这个问题时,我偶然看到了以下事实。
请看这个例子:
void func1(const char *str1, const char *str2) { puts(str1); puts(str2); }
...
auto fn = std::bind(func1, "asdf");
fn("1234");
编译失败:
prog.cpp: In function ‘int main()’:
prog.cpp:11:14: error: no match for call to ‘(std::_Bind<void (*(const char*))(const char*, const char*)>) (const char [5])’
fn("1234");
^
如果我将代码更改为此,它工作得很好:
auto fn = std::bind(func1, "asdf", _1);
输出是:
asdf
1234
为什么?我只绑定std::bind
第一个参数..自动“占位符”其他参数是不可能的吗?(我期望std::bind1st
在 C++98 中得到相同的结果。)为什么?