【问题标题】:Can intermixing std::'s and boost::'s ::bind and ::function cause problems?混合 std::'s 和 boost::'s ::bind 和 ::function 会导致问题吗?
【发布时间】:2023-04-01 20:27:01
【问题描述】:

我认为这个问题的答案是否定的,但我只是想确定一下。

如果我在函数中有一个std::function 作为参数,那么传入boost::bind 是否有任何问题,反之亦然?

编辑:

我发现 boost::bind 使用的占位符在包含 boost\bind.h 时会直接导入到命名空间中,并且它们与 std::bind 不兼容。对于 std::bind,您必须显式引用占位符,例如:std::placeholders::_1,或执行其他一些 typedef 或使用魔法使它们同时可用。

【问题讨论】:

  • 您可能想了解嵌套绑定表达式是什么,并检查不同库在这方面如何相互作用。

标签: c++ boost c++11 std


【解决方案1】:

没有。 std::(和 boost::function 的全部目的是它们可以接受 any 可以使用正确签名调用的函数对象 - 包括 lambda、仿函数和任何函数的结果一种绑定。他们不关心你的函数对象来自哪里或它是什么类型。

您甚至可以将它们相互绑定,尽管我不太确定您为什么要这样做。

【讨论】:

  • 感谢您为我验证。我确实发现 boost 将其占位符导入到与 std::bind 的占位符冲突的命名空间中,因此您必须使用 std::placeholders::_1 显式命名 std 的占位符
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 2011-08-19
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 2016-03-16
  • 2013-04-16
  • 1970-01-01
相关资源
最近更新 更多