gpt4 book ai didi

c++11 - std::atomic 作为 std::map 的值

转载 作者:行者123 更新时间:2023-12-03 22:44:53 25 4
gpt4 key购买 nike

我想在 map 中使用原子变量。我正在使用 Visual Studio 2012 (msvc-11) 和 gcc 4.7。我定义了一个类型:

typedef std::map<uint64_t, std::atomic<int64_t>> value_map_t;

在 msvc-11 中,行
value_map_t map;
map[1] = 0;

产生错误:

error C2248: std::atomic<__int64>::atomic : cannot access private member declared in class std::atomic<__int64>



gcc 4.7 ( see here ) 也是如此

error: use of deleted function std::atomic<long int>::atomic(const std::atomic<long int>&)



但是,在 Visual Studio 2013 (msvc-12) 及更高版本以及 gcc 4.8 及更高版本中,它运行良好。

亲自查看 gcc 4.8Visual Studio 2013+

我可以在 msvc-11/gcc 4.7 中做些什么来使它工作?

最佳答案

我无权访问 Visual C++ 编译器,但我猜以下可能有效。使用间接,利用映射到 atomic s 的(智能)指针:

#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;
}

关于c++11 - std::atomic 作为 std::map 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35091396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com