如何转换转发的参数包?

时间:2019-03-07 00:20:40

标签: c++ c++11 c++17 variadic-functions

我将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);

为什么不能进行这项工作(首先不进行演员转换)?如何正确执行此操作?

1 个答案:

答案 0 :(得分:1)

问题出在调用LogMessage上:格式字符串必须是wstring,因此L中缺少L" GPU Max Clock rate: %.0f MHz (%0.2f GHz)\n"会触发该错误。