我正在尝试以一种既可以使用仅移动对象也可以使用仅复制对象的方式实现通用线程安全队列。这是我尝试过的(为了简单起见,我删除了所有不相关的代码(锁)):
struct MoveOnly
{
MoveOnly() = default;
MoveOnly(const MoveOnly& a) = delete;
MoveOnly& operator=(const MoveOnly& a) = delete;
MoveOnly(MoveOnly&& a) = default;
MoveOnly& operator=(MoveOnly&& a) = default;
std::vector<int> v;
};
struct CopyOnly
{
CopyOnly() = default;
CopyOnly(const CopyOnly &a) = default;
CopyOnly &operator=(const CopyOnly &a) = default;
CopyOnly(CopyOnly &&a) = delete;
CopyOnly &operator=(CopyOnly &&a) = delete;
std::vector<int> v;
};
template <typename T>
class Queue
{
std::queue<T> q;
public:
T pop()
{
T t = q.front();
return t;
}
void push(T&& …Run Code Online (Sandbox Code Playgroud)