gpt4 book ai didi

c++ - GMock,调用 SaveArg 捕获的 std::function

转载 作者:搜寻专家 更新时间:2023-10-31 00:59:55 30 4
gpt4 key购买 nike

std::function<result(xxx &, yyy)> l_function;
auto l_strategyMock = std::make_shared<StrategyMock>();
EXPECT_CALL(*m_strategyFactoryMock, createStrategy("default", _))
.WillRepeatedly(DoAll(SaveArg<1>(&l_function),
Return(l_strategyMock)));
EXPECT_CALL(*l_strategyMock, invokeFunction(_, _)) //invokeFunction(xxx &, yyy)
.WillOnce(Invoke(l_defaultHoStartRequestFiller));

此代码崩溃:

C++ exception with description "bad_function_call" thrown in the test body.

第一个函数以 lambda 作为参数<1> 被调用。我想捕获它然后在第二个 EXPECT_CALL 上调用它,但 l_function 似乎没有初始化。

是否有像“InvokePointee”这样的东西可以使这项工作正常进行?

最佳答案

使用 std::reference_wrapper<T> .它提供了一个函数调用运算符,并且它本身是一个可复制类型:

EXPECT_CALL(*l_strategyMock, invokeFunction(_, _))
.WillOnce(Invoke( std::ref(l_function) ));
// ~~~~~~~~^ ^

关于c++ - GMock,调用 SaveArg 捕获的 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32403343/

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