回答的同时这个问题 https://stackoverflow.com/questions/22909459/how-can-i-pass-a-class-method-to-another-function-like-what-happen-in-thread-con/22910156#22910156,我偶然看到以下事实。
请看这个例子:
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
Why? I bind只有第一个参数..这不可能吗std::bind
自动“占位”其他参数? (我期望得到相同的结果std::bind1st
在 C++98 中。)为什么?
一般来说使用时bind
这是不可能的,因为func1
可能有默认参数,或者具有不同数量的参数的重载,或者可能是一个函子,其operator()
是一个带有参数包的函数模板。
在这种情况下,有多种不同的调用方式func1
。我认为这是不可取的bind
选择一个并用占位符填充空白。
在您的示例中,它是明确的,但我不确定确定明确的情况是什么、用代码准确地检测它们并在标准中准确地定义它们有多容易。
bind1st
设计上是明确的,因为它专门用于绑定 2 参数函子的第一个参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)