我有使用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〃;
问题:
- 在上面的互斥锁代码中,
std::bind
的替换是什么 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,可以省略()
。