更新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});
}
如果可以的话,忽略其他所有期望我试图在断言语句中打印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语句中完成吗?
答案 0 :(得分:5)
如果您不介意使用宏:
#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
的{{1}},但c_str()
返回指向内部缓冲区的指针,因此无法从lambda返回。
另请注意,由于正在使用流,因此您可以在所提供的消息中放置您喜欢的任何对象,并且相应的operator<<
重载,而不仅仅是int
这样的原始类型。
答案 1 :(得分:0)
此处没有理由用i
包围{}
值。只需直接使用i
Assert::AreEqual(42, my_value_to_verify, L"Value %d failed", i);
...
的{{1}}部分指定该方法在该位置接受可变数量的参数。因此,您可以通过多种方式调用它
... array<Object^>^