dtm*_*and 3 c++ assert visual-studio-2012
更新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
}
Run Code Online (Sandbox Code Playgroud)
更新2
正如@JaredPar所指出的那样,我所指的文档实际上是用于C++/CLI.在进行额外搜索之后,看起来以下链接包含对我正在使用的函数的引用.
更新1
从{i}中删除括号也会导致编译错误:
Error: no instance of overloaded function ...AreEqual matches the argument list (int, int, const wchar_t[16], int)
Run Code Online (Sandbox Code Playgroud)
原帖
使用Microsoft文档我正在尝试构造一个将打印格式化消息的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});
}
Run Code Online (Sandbox Code Playgroud)
如果可以,请忽略其他所有期望我试图在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 '}'
Run Code Online (Sandbox Code Playgroud)
我正在惹恼如何声明数组以格式化消息.在我的情况下如何声明这个数组?可以在Assert语句中完成吗?
如果您不介意使用宏:
#define MSG(msg) [&]{ std::wstringstream _s; _s << msg; return _s.str(); }().c_str()
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
Assert::AreEqual(42, my_value_to_verify, MSG("Value " << i << " failed"));
Run Code Online (Sandbox Code Playgroud)
请注意,c_str()最后必须在lambda 之外 - str()返回原始流内容的副本,以便它们能够在销毁之后继续存在_s,但c_str()返回指向内部缓冲区的指针,因此无法从lambda返回.
另请注意,因为正在使用流,所以您可以在消息中提供您喜欢的任何对象,这是相应的operator<<重载,而不仅仅是原始类型int.