gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:38:47 26 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编译器参数和/或Visual C++ Team Blog中声明的_HAS_CXX17覆盖来控制。问题在于,没有ovverides时,_HAS_CXX17的定义取决于yvals.h中的编译器版本(请参阅this问题),因此,这可能会因Visual Studio的版本而有所不同(因此我无法给您一个直观的答案,即该组合会给您带来什么)所需的结果,因为不清楚是否要禁用/启用它,以及确切的Visual Studio版本是什么)。如文章中所述,这样做的缺点是您可能会放弃其他功能,因为它们未提供对STL的精细控制。但是,您可以尝试看看恢复到旧的STL行为是否会给您造成问题。

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

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