我将printf(/*heterogenous pack of arguments*/)
替换为LogMessage(/*arguments*/)
。
但是,我得到了
错误C2665'swprintf_s':2个重载都不能转换所有 参数类型
template<class ...T>
auto DwarfCuda::LogMessage(T&&... args) -> void
{
wchar_t updatedMessage[256];
swprintf_s(updatedMessage, forward<T>(args)...); //C2665
if (LogMessageChangedCallback != nullptr)
LogMessageChangedCallback(updatedMessage);
}
它适用于许多示例,但不适用于以下示例:
LogMessage( " GPU Max Clock rate: %.0f MHz (%0.2f GHz)\n",
deviceProp.clockRate * 1e-3f, deviceProp.clockRate * 1e-6f);
为什么不能进行这项工作(首先不进行演员转换)?如何正确执行此操作?
答案 0 :(得分:1)
问题出在调用LogMessage
上:格式字符串必须是wstring
,因此L
中缺少L" GPU Max Clock rate: %.0f MHz (%0.2f GHz)\n"
会触发该错误。