gpt4 book ai didi

c++ - VS 2017 程序无法识别 "scoped_lock"

转载 作者:行者123 更新时间:2023-11-30 05:02:27 28 4
gpt4 key购买 nike

我在 VS 2017 中使用 scoped_locked 时遇到问题。我相信我将它们追溯到 <mutex>声明,复制如下。禁用 #if 最安全的方法是什么?在开始时切换以使用 scoped_lock?再次感谢。

#if _HAS_CXX17
// CLASS TEMPLATE scoped_lock
template<class... _Mutexes>
class scoped_lock
{ // class with destructor that unlocks mutexes
public:
explicit scoped_lock(_Mutexes&... _Mtxes)
: _MyMutexes(_Mtxes...)
{ // construct and lock
_STD lock(_Mtxes...);
}

explicit scoped_lock(adopt_lock_t, _Mutexes&... _Mtxes)
: _MyMutexes(_Mtxes...)
{ // construct but don't lock
}

~scoped_lock() _NOEXCEPT
{ // unlock all
_For_each_tuple_element(
_MyMutexes,
[](auto& _Mutex) _NOEXCEPT { _Mutex.unlock(); });
}

scoped_lock(const scoped_lock&) = delete;
scoped_lock& operator=(const scoped_lock&) = delete;
private:
tuple<_Mutexes&...> _MyMutexes;
};

最佳答案

根据您的问题,您不清楚是否要禁用/启用此行为。但一般来说,这可以通过 /std:c++latest 编译器参数和/或覆盖 _HAS_CXX17 来控制,如 Visual C++ Team Blog 中所述.问题是,如果没有 ovverides,_HAS_CXX17 的定义取决于 yvals.h 中的编译器版本(参见 this 问题),因此这可能会因版本而异Visual Studio(所以我不能给你一个直截了当的答案什么组合会给你所需的结果,因为不清楚你是否要禁用/启用它,以及你的确切 Visual Studio 版本是什么)。正如文章中提到的,这有一个缺点,您可能会失去其他功能,因为它们没有提供对 STL 的细粒度控制。但是您可以尝试看看恢复到旧的 STL 行为是否会给您带来问题。

关于c++ - VS 2017 程序无法识别 "scoped_lock",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49882137/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com