如何从由许多无法复制但可以移动的结构体组成的队列中获取第一个结构体

问题描述 投票:0回答:1

该结构体包含一个

std::promise<std::any>
,因此它不能由复制构造函数构造。但是即使我提供了移动构造函数和移动分配器,它也无法正确运行。并且它报告了三个错误:

  1. 静态断言失败:结果类型必须可从输入类型构造
  2. 无法引用函数 "test::test(const test &other)" (已声明所在行数:19) -- 它是已删除的函数
  3. 使用已删除的函数'test::test(const test&)'

重现代码:

#include <future>
#include <any>
#include <queue>

struct test{
    std::promise<std::any> p;

    test()=default;
    test(test&& other){
        p = std::move(other.p);
    }

    test& operator=(test&& other){
        p = std::move(other.p);
        return *this;
    }

    test& operator=(const test& other)=delete;
    test(const test& other)=delete;
};

test getFirst(std::queue<test> tests){
    test test = tests.front();
    tests.pop();
    return test;
}


int main(){
    test t;
    std::queue<test> tests;
    test t2 = getFirst(tests);
    return 0;
}
c++ struct promise queue
1个回答
0
投票
test getFirst(std::queue<test> &tests) {  // (1)
  test test = std::move(tests.front());   // (2)
  tests.pop();
  return test;
}

您的代码中有两个问题。

  1. 您通过副本获得了
    std::queue<test> tests
  2. tests.front()
    返回了可以移动的引用。
© www.soinside.com 2019 - 2024. All rights reserved.