如何在C ++中修复'atomic <t>要求T是平凡可复制的'错误

时间:2019-05-09 06:46:07

标签: c++ templates

我制作了用于检查ABA问题的链接列表。但是我对模板有问题... 请检查我的代码

我几乎完成了代码。但它存在有关“琐事可复制”的模板错误

#define _ENABLE_ATOMIC_ALIGNMENT_FIX
#include<stdio.h>
#include<iostream>
#include<atomic>
#include<thread>

using namespace std;
template<class T>
class slist {
private:
    struct Node { T item;  shared_ptr<Node> next; };
    atomic<shared_ptr<Node>> head;
public:
    class reference {
        shared_ptr<Node> p;
    public:
        reference(shared_ptr<Node> p_) {} 
        T& operator*() { return p->item; }
        T* operator->() { return &p->item; }    
    };
    auto find() const {
        auto p = head.load();
        while (p && p-> next!=NULL) {
            printf("%d ", p->item);
            p = p -> next;
        }
        return reference(move(p));  
    }
    void push_(T item) {
        auto p = make_shared<Node>();   
        p->item =item;
        p->next = head;
        while (!head.compare_exchange_weak(p->next, p)) {}
    }
    void pop_() {
        auto p = head.load();
        while (p && !head.compare_exchange_weak(p, p -> next)) { ; }
        }
};
template<typename T>
void func1(slist<T> s){
    for (int i = 0; i < 1000; i++) {
        s.push_(i);
    }
}

//skip

错误注释为 “原子要求T必须是可复制的。”

我希望该错误消失。...

0 个答案:

没有答案