- 主题:std:scoped_lock<T>的模板参数T的指定问题
std:scoped_lock<T>或者std:lock_guard<T>,在每次声明时需要指定T类型。
然而,
1、有的地方用std::mutex。
2、有的地方std::recursive_mutex(虽然这个可以通过合理的设计消除掉recursive的需求)。
3、用std::shared_mutex的倒好说,因为这个要用std::shared_lock、std::unique_lock,不搭配std::scoped_lock用。
也就是说,每次加锁/解锁时都要指明到底是std::mutex,还是std::recursive_mutex,还是很繁琐的。
目前能想到的稍微懒人点的写法,是:
std::mutex m_lock;
std::scoped_lock<decltype(m_lock)> guard1{m_lock};
std::recursive_mutex m_rlock;
std::scoped_lock<decltype(m_rlock)> guard2{m_rlock};
还有没更懒人点的写法,不用指定T的类型的?
--
FROM 123.118.186.*
你这个chatgpt好啰嗦,哈哈
我问的chagpt也说可以搞别名
【 在 ae175b1bf388 的大作中提到: 】
: 在C++中,std::scoped_lock(C++17引入)和std::lock_guard(C++11引入)是RAII(
: Resource Acquisition Is Initialization)风格的封装器,它们会在构造时自动锁定
: 互斥量(mutex),并在析构时自动解锁。这些封装器确实需要知道它们将管理哪种类型
: ...................
--
FROM 114.240.236.*
这个肯定不行
auto guard1{m_lock};
下面这种也不行
std::scoped_lock<decltype(auto)> guard1{m_lock};
估计只能是这么搞别名了
using scoped_guard = std::scoped_lock<std::mutex>;
【 在 ziqin 的大作中提到: 】
: auto?
--
FROM 221.220.171.*
不能,过不去
【 在 ziqin 的大作中提到: 】
: std::locak_guard<auto>
--
FROM 221.220.171.*
nice,可以的。头一次用这种
【 在 lin 的大作中提到: 】
: C++17中,一般使用不需要给出模板参数,编译器可以自动推导出来。
: std::scoped_lock guard1{m_lock};
: 上面这样就可以了。
: ...................
--
FROM 221.220.171.*
好东西,还可以结合 Deduction Guides
【 在 lin 的大作中提到: 】
: C++17中,这叫“class template argument deduction”,array, unique_lock, tuple
: 等等都可以不需要指定模板参数就可以由编译器推导出来。适合懒人,可读性也更好。
:
--
FROM 221.220.171.*
充分说明了使用C++新标准的必要性,新的确实方便了码农
【 在 ysheshang 的大作中提到: 】
: 正要说呢,有人回了。
:
--
FROM 221.220.171.*