如何投射转发的参数包?

How to cast a forwarded parameter pack?

我正在用 LogMessage(/*arguments*/) 替换 printf(/*heterogenous pack of arguments*/)

不过,我得到了

Error C2665 'swprintf_s': none of the 2 overloads could convert all the argument types

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" GPU Max Clock rate: %.0f MHz (%0.2f GHz)\n"L 的缺失触发了错误。