Replacement for `std::bind` with Visual Studio 2019?



我有使用std::bind:的Visual Studio 2017编译的代码

std::unique_lock<std::mutex>    m_lock(m_mutex_wait_for_message);
m_cond_variable.wait(m_lock, std::bind(&Logging::is_message_available, this));
std::lock_guard<std::mutex>     lock_guard(m_mutex_pushing_message);

我们现在正在使用VS2019进行编译,它抱怨有错误:
'bind': is not a member of 'std'
'bind': function does not take 2 arguments

CppReference.com说";直到C++20〃;

问题:

  1. 在上面的互斥锁代码中,std::bind的替换是什么
  2. std::bind的替代品是什么

正如其他人所提到的,您可能缺少包含它的头文件

当cppreference说until C++20时,请注意,它的正下方说since C++20,这意味着函数的签名在C++20中发生了变化,并且在之前和之后都显示出来。在这种情况下,constexpr被添加到函数中,std::bind仍然存在。

至于用什么替换std::bind,由于C++14,您可以使用lambda来代替std::bind的每个实例,请参阅此处以获得更好的解释。将此应用于您可以编写的代码:

m_cond_variable.wait(m_lock, [&] { is_message_available(); });

在C++20中,对于不带参数的lambda,可以省略()

最新更新