如何施放转发参数包

How to cast a forwarded parameter pack?

本文关键字:参数 转发 何施放      更新时间:2023-10-16

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

但是,我得到了

错误c2665'swprintf_s':两个超载都无法转换全部 参数类型

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不存在触发了该错误。