如何投射转发的参数包?
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
的缺失触发了错误。
我正在用 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
的缺失触发了错误。