【发布时间】:2021-10-10 02:41:58
【问题描述】:
template<class Key, class Value>
class ThreadSafeMap
{
std::mutex m_;
std::map<Key, Value> c_;
public:
Value get(Key const& k) {
std::unique_lock<decltype(m_)> lock(m_);
return c_[k]; // Return a copy.
}
template<class Value2>
void set(Key const& k, Value2&& v) {
std::unique_lock<decltype(m_)> lock(m_);
c_[k] = std::forward<Value2>(v);
}
};
Thread safe std::map: Locking the entire map and individual values
我刚刚阅读了上面的链接并找到了这段代码。制作线程安全映射看起来很棒。我知道在函数set中,我们在第二个参数v上使用了引用折叠规则。但是我不明白为什么我们需要导入另一个template<class Value2>,为什么我们不能简单地使用现有的模板class Value?
【问题讨论】:
标签: c++ c++11 templates reference forwarding-reference