我用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/

10-11 18:20