gpt4 book ai didi

c++ - 有条件的constexpr变量

转载 作者:行者123 更新时间:2023-12-01 14:43:53 29 4
gpt4 key购买 nike

我有一个项目的一堆测试,这些测试最初是使用Gtest编写的,但此后我将其移至Microsoft的CppUnitTestFramework中。为了避免必须重写所有测试,我制作了遵循GTest如何进行测试的宏-例如EXPECT_EQ

现在,我试图消除MsBuild生成的所有警告,包括代码分析生成的所有警告,这些警告与使用constexpr(如果可用)有关。在测试中,有很多这样的测试,因为期望值通常是文字,尽管并非总是如此。所以我有自己的EXPECT_EQ,如下所示:

#define EXPECT_EQ( x, y ) { const auto _x = (x); const auto _y = (y); if ( _x == _y ) {} else { Assert::Fail(createFailMessage( _x, L" == ", _y ).c_str(), LINE_INFO() ); } }

这很好用;但是,如果使用 EXPECT_EQ( 7, getTime() )调用它,那么我会收到关于 _x如何成为 constexpr的警告。

我知道我可以像这样创建一个单独的宏:
#define EXPECT_CEQ( x, y ) { constexpr auto _x = (x); const auto _y = (y); if ( _x == _y ) {} else { Assert::Fail(createFailMessage( _x, L" == ", _y ).c_str(), LINE_INFO() ); } }

但是,如果稍后再返回GTest,则必须修复所有测试以将 EXPECT_CEQ更改为 EXPECT_EQ

所以,我的问题是,是否可以结合这两个宏以根据是否可以是 _x有条件地使 constexpr成为 constexpr

PS:是的,我知道,宏不好。

最佳答案

一种可能的解决方案是使用立即调用的lambda:

const auto _x = [&]{ return (x); }();
[&]将捕获 x表达式中可能使用的每个变量。

关于c++ - 有条件的constexpr变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59286544/

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