gpt4 book ai didi

c++ - EXPECT_NO_THROW语句的gtest捕获结果

转载 作者:行者123 更新时间:2023-11-27 23:57:12 25 4
gpt4 key购买 nike

假设我有一个方法可以创建一个非平凡可构造的对象,该对象被 RVO 返回给调用者。例如

MyComplexClass value = deserialize();

反序列化 在失败时抛出异常,所以我想做类似的事情

EXPECT_NO_THROW(MyComplexClass value = deserialize());

当然,value 超出了范围(因为宏引入了 try/catch block )。还有

MyComplexClass value;
EXPECT_NO_THROW(value = deserialize());

不起作用,因为没有默认构造函数(例如它是 = delete)。

对此有什么想法吗?我可以做类似的事情

template<typename TResult>
TResult return_assert_no_throw(std::function<TResult()> expression)
{
try
{
return expression();
}
catch (const std::exception & ex)
{
ASSERT_TRUE(false);
}
}

但这似乎有点 hacky,我们丢失了有关异常的信息

最佳答案

拥有虚拟实例的替代方法是在集合中使用 emplace:

std::vector<MyComplexClass> v;
EXPECT_NO_THROW(v.emplace_back(deserialize()));
// work with v[0] as the value

关于c++ - EXPECT_NO_THROW语句的gtest捕获结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41707724/

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