在关于 boost::bind
的对话中,有人注意到 std::bind1st
存在于 C++03 中,但它“几乎无法使用”。
我找不到任何可靠的东西来支持这一点。
The boost::bind
documentation 说:
也许暗示这些限制确实适用于 std::bind1st
。
除了对参数数量的明显限制之外,boost::bind
对 std::bind1st
/std::bind2nd
的优势是什么? std::bind1st
在 C++03 中“几乎无法使用”的断言是否有任何值(value)?
最佳答案
如果我们查看 C++03 20.3.6.1 和 20.3.6.2,那么我们会看到,对于 bind1st
的仿函数参数,我们需要三个 typedef
s(对于结果类型,第一个和第二个参数),并且结果运算符只接受一个参数。
这意味着我们不能简单地在普通函数指针上使用 bind1st
,因为它们没有那些 typedef
s。此外,我们只能在二进制函数上使用 bind1st
,因为我们不支持更多参数。此外,boost::bind
等人具有能够重新排序参数的优势,当然支持的不仅仅是第一个。
在我看来,活页夹的大多数用例是用于自由函数和成员函数,而不是用于仿函数对象;因此 bind1st
的使用非常有限(虽然可以通过使用其他工具如 ptr_fun
进行扩展,但是这是否使它更有用是值得怀疑的)。当然,这仅基于个人经验,但有人可能想对 bind1st
进行 Google 代码搜索统计。
关于c++ - 为什么 std::bind1st 会被视为 "almost unusable"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6609337/