【发布时间】:2019-05-31 02:19:28
【问题描述】:
在单元测试中,我试图实现更实用的代码并简化一类函数调用,例如:
std::wstring widestr = std::wstring(o.Descr.begin(), o.Descr.end()); //o.Descr is string
wchar_t message[100];
swprintf(message, 100, L"size: %d", size);
Logger::WriteMessage(message);
进入:
Logger::WriteMessage(Message(L"string: %d", widestr.c_str()));
使用:
template<typename... T>
wchar_t* Message(T &&... args)
{
wchar_t message[100];
swprintf(message, 100, forward<T>(args)...);
return message;
}
但输出不同:
而不是
1。我一开始就做正确的事吗?我错过了什么?
2。理想情况下,我想写类似 (c#) 的东西:
$"size:{size}".ToLogMessage();
我认为我不能在 c++{11,14,17} 中。你确认了吗?
Logger::WriteMessage 是 Microsoft.VisualStudio.TestTools.CppUnitTestFramework 的一部分,我无法更改它。
【问题讨论】:
-
你在 windows aka visual c++ 上吗?如果是哪个版本?
-
您的尝试无论如何都会返回一个悬空指针。
-
对。我更正了这个问题。
-
你不愿意使用
std::w?string吗? -
@UmNyobe VC++2017 版本 15.9 v14.16
标签: c++ c++11 functional-programming perfect-forwarding