C++ Assert::AreEqual格式消息在一行中

C++ Assert::AreEqual格式消息在一行中,c++,visual-studio-2012,assert,C++,Visual Studio 2012,Assert,更新3: 用三行代码向我演示如何执行此操作。有人知道如何在一条线上完成吗 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

更新3:

用三行代码向我演示如何执行此操作。有人知道如何在一条线上完成吗

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
}
原创帖子

我正在尝试使用构造一个将打印格式化消息的断言语句。例如:

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

Assert::AreEqual(42, my_value_to_verify, L"Value %d failed", i);
..
部分。。。array^
指定该方法在该位置接受可变数量的参数。因此,你可以用多种方式来称呼它

Assert::AreEqual(42, my_value_to_verify, L"");
Assert::AreEqual(42, my_value_to_verify, L"%d%d", 1, 2);

如果您不介意使用宏:

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

#define MSG(MSG)[&]{std::wstringstream\u s;\u s编译器也不喜欢这样。“错误:没有重载函数的实例…与参数列表匹配…”@ dtMand是使用C++或C++ + CLI,很难从您的示例中判断。code@dtmland但是,您链接的文档是C++ C++代码。您需要使用c++/CLI来调用它,因为它已经管理输入了。您可能是正确的。我相信我可能链接到了错误的文档。也许这个函数的C++版本没有。支持字符串消息的格式参数。看起来C++版本不支持使用参数格式化。字符串必须已经格式化。
Assert::AreEqual(42, my_value_to_verify, L"");
Assert::AreEqual(42, my_value_to_verify, L"%d%d", 1, 2);
#define MSG(msg) [&]{ std::wstringstream _s; _s << msg; return _s.str(); }().c_str()
Assert::AreEqual(42, my_value_to_verify, MSG("Value " << i << " failed"));