Vla*_*tow 6 gcc dictionary atomic c++11 visual-studio-2012
我想在地图中使用原子变量。我正在使用 Visual Studio 2012 (msvc-11) 和 gcc 4.7。我定义了一个类型:
typedef std::map<uint64_t, std::atomic<int64_t>> value_map_t;
Run Code Online (Sandbox Code Playgroud)
在 msvc-11 中,行
value_map_t map;
map[1] = 0;
Run Code Online (Sandbox Code Playgroud)
产生错误:
错误C2248::
std::atomic<__int64>::atomic无法访问类中声明的私有成员std::atomic<__int64>
gcc 4.7 也会发生同样的情况(参见此处)
错误:使用已删除的函数
std::atomic<long int>::atomic(const std::atomic<long int>&)
但是,在 Visual Studio 2013 (msvc-12) 及更高版本以及 gcc 4.8 及更高版本中,它运行良好。
亲自查看gcc 4.8和Visual Studio 2013+
我可以在 msvc-11/gcc 4.7 中做什么才能使其工作?
我无法访问 Visual C++ 编译器,但我猜测以下内容可能有效。使用间接寻址,利用 s 的(智能)指针的映射atomic:
#include <atomic>
#include <map>
#include <memory>
using atomic_ptr_t = std::shared_ptr<std::atomic<int64_t>>;
typedef std::map<uint64_t, atomic_ptr_t> value_map_t;
int main()
{
value_map_t map;
map[1] = atomic_ptr_t(new std::atomic<int64_t>(0));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9051 次 |
| 最近记录: |