在关于 boost::bind 的对话中,有人注意到 std::bind1st 存在于 C++03 中,但它“几乎无法使用”。

我找不到任何可靠的东西来支持这一点。

The boost::bind documentation 说:



也许暗示这些限制确实适用于 std::bind1st

除了对参数数量的明显限制之外,boost::bindstd::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/

10-13 09:52