gpt4 book ai didi

C++ 返回一个 future

转载 作者:行者123 更新时间:2023-12-04 08:10:48 30 4
gpt4 key购买 nike

我正在使用谷歌测试并试图模拟一个返回 future 的方法。我正在做的是在测试用例中创建一些 future 的对象,然后我做“when(mock.Call()).thenReturn(myFutureObject),但我得到一个错误“use of deleted function std::future<_res>:: future (const std::future<_Res>&)"。

这是代码:

std::promise<MyClass> pr;
std::future<MyClass> fut { pr.get_future() };

std::cout << fut.valid() << std::endl; // this returns 1 so it seems I have a valid future object

EXPECT_CALL(mockSvc, mymethod()).WillOnce(Return(std::move(fut)));

// this "expected call" throws an error "use of deleted function std::future<_res>::future(const std::future<_Res>&)
// /usr/include/c++/7/future:782:7: note declared here
// future(const future&) = delete;

我想我收到了有关删除 future 的复制构造函数的错误,所以我的问题是,如何“模拟”一个 future 对象,即如何在不复制的情况下“返回”一个 future,我做到了尝试使用“std::move”?我在这里错过了什么?

最佳答案

从 gtest/gmock 1.10.0 开始 - 可以使用 lambdas 而不是简单的 Return 操作。所以试试这个:

std::promise<MyClass> pr;

EXPECT_CALL(mockSvc, mymethod()).WillOnce([&]
{ return pr.get_future(); });

关于C++ 返回一个 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65971088/

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