我用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);
为什么不能进行这项工作(首先不应该进行演员转换)?如何正确做到这一点?
最佳答案
问题出在LogMessage
的调用中:格式字符串必须是wstring
,因此L
中缺少L" GPU Max Clock rate: %.0f MHz (%0.2f GHz)\n"
会触发该错误。
关于c++ - 如何转换转发的参数包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55034224/