C++17中,一般使用不需要给出模板参数,编译器可以自动推导出来。
std::scoped_lock guard1{m_lock};
上面这样就可以了。
【 在 z16166 的大作中提到: 】
: 标 题: std:scoped_lock<T>的模板参数T的指定问题
: 发信站: 水木社区 (Mon May 13 17:11:28 2024), 站内
:
: 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的类型的?
:
:
: --
: 每天半小时节奏光剑,预防老年痴呆
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 123.118.186.*]
--
FROM 86.211.57.*