我已经在std::unordered_map
周围写了一些包装代码,所以我可以暂时使用它进行多线程访问(我知道有更好的方法可以做到这一点)。
作为课程的一部分,我有以下代码允许每次迭代std::unordered_map
:
auto begin() const ->decltype(map.cbegin()) {
return map.begin();
}
auto end() const ->decltype(map.cend()) {
return map.end();
}
但英特尔编译器( v14 )并不喜欢这样:
error #288: a nonstatic member reference must be relative to a specific object
1> auto begin() const ->decltype(map.cbegin()) {
error #288: a nonstatic member reference must be relative to a specific object
1> auto end() const ->decltype(map.cend()) {
我有什么建议可以解决这个问题吗?以上是在MSVC 12上工作的。我更喜欢适用于大多数编译器的解决方案吗?
#include <string>
#include <thread>
#include <unordered_map>
#include <memory>
#include <boost\shared_ptr>
class my_map {
private:
std::unordered_map<std::string, boost::shared_ptr<int> > map;
std::mutex mtx;
public:
boost::shared_ptr<int>& operator[](std::string key)
{
return map[key];
}
auto begin() const ->decltype(map.cbegin()) {
return map.begin();
}
auto end() const ->decltype(map.cend()) {
return map.end();
}
};
我省略了构造函数和insert()
。
更新:找到问题,当我将std::unordered_map
商店的类型从int
更改为MyClass
时,就会发现问题。
MyClass
是否需要在其中明确声明的内容才能使上述内容正常工作?