C ++ 11具有原子属性的结构定义

在C ++ 11中,我有一个有很多像这样的属性的结构:

#include <atomic>
struct Foo {
  int x;
  int y;
  // ...
  // LOTS of primitive type attributes, followed by...
  // ...
  std::atomic_bool bar;
}

我想定义一个像这样的实例:

bool bar_value = true;
Foo my_foo = {/*attribute values*/, bar_value};

然而,atomic_bool抛出“使用已删除的函数”错误,因为我认为在原子上不允许复制构造。 有没有什么办法可以解决这个问题,就是写出一个构造函数或分别赋值每个值?

看起来很不方便,因为它的许多属性之一是特殊情况,所以必须以特殊的方式处理这个相对平庸的结构。

更新:

  • 任何接受者? 我一直在环顾四周,但似乎没有任何直接的解决方法。

  • 尝试将atomic_bool的初始化包装在其自己的初始化程序列表中。 它在g ++ 4.7中为我工作。

    #include <atomic>
    #include <iostream>
    
    struct Foo
    {
        int x;
        int y;
        std::atomic_bool bar;
    };
    
    int main(int, char**)
    {
        Foo f1 = {1, 2, {true}};
        Foo f2 = {3, 4, {false}};
    
        std::cout << "f1 - " << f1.x << " " << f1.y << " "
                  << (f1.bar.load()?"true":"false") << std::endl;
        std::cout << "f2 - " << f2.x << " " << f2.y << " "
                  << (f2.bar.load()?"true":"false") << std::endl;
    }
    

    我得到了以下输出:

    $ g++ -std=c++11 test.cpp -o test && ./test
    f1 - 1 2 true
    f2 - 3 4 false
    
    链接地址: http://www.djcxy.com/p/78213.html

    上一篇: C++11 Struct definition with atomic attribute

    下一篇: c++