gpt4 book ai didi

c++ - 一行中的 Assert::AreEqual 格式消息

转载 作者:太空狗 更新时间:2023-10-29 20:41:32 24 4
gpt4 key购买 nike

更新 3:

This page告诉我如何用三行来做。任何人都知道如何在一行中完成它?

for (int i = 0; i < 5; i++) {
my_value_to_verify = get_my_values(i);

wchar_t message[200]; // Line 1
_swprintf(message, L"Value %d failed", i); // Line 2
Assert::AreEqual(42, my_value_to_verify, message); // Line 3
}

更新 2

正如@JaredPar 所指出的,我所指的文档实际上是针对 C++/CLI 的。额外搜索后,它看起来像 the following link包含对我正在使用的函数的引用。

更新 1

从 {i} 中删除括号仍然会导致编译错误:

Error: no instance of overloaded function ...AreEqual matches the argument list (int, int, const wchar_t[16], int)

原帖

使用 Microsoft documentation我正在尝试构建一个将打印格式化消息的 Assert 语句。例如:

for (int i = 0; i < 5; i++) {
my_value_to_verify = get_my_values(i);
Assert::AreEqual(42, my_value_to_verify, L"Value %d failed", {i});
}

如果可以,请忽略其他所有期望我试图在 assert 语句中打印 i 值的内容。最后一个参数“{i}”应该是一个数组——我正在尝试遵循文档中的说明。但是,这样做时我会收到编译错误。

(231): error C2143: syntax error : missing ')' before '{'
(231): error C2059: syntax error : ')'
(231): error C2143: syntax error : missing ';' before '{'
(231): error C2143: syntax error : missing ';' before '}'

我对如何声明数组以便格式化消息感到困惑。在我的例子中应该如何声明这个数组?可以在Assert语句里面完成吗?

最佳答案

如果您不介意使用宏:

#define MSG(msg) [&]{ std::wstringstream _s; _s << msg; return _s.str(); }().c_str()

像这样使用它:

Assert::AreEqual(42, my_value_to_verify, MSG("Value " << i << " failed"));

请注意 c_str()最后必须在 lambda 的外面str()返回原始流内容的拷贝,以便它们在 _s 的破坏中幸存下来,但是c_str()返回一个指向内部缓冲区的指针,因此不会在 lambda 返回后继续存在。

另请注意,因为正在使用流,所以您可以在消息中放置您喜欢的任何对象,前提是有相应的 operator<<。重载,而不仅仅是原始类型,如 int .

关于c++ - 一行中的 Assert::AreEqual 格式消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052073/

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