c++ - 如何转换转发的参数包?

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

我正在用 LogMessage(/*arguments*/) 替换 printf(/*heterogeneous 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 L"GPU Max Clock rate: %.0f MHz (%0.2f GHz)\n" 触发了错误。

关于c++ - 如何转换转发的参数包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034224/

相关文章:

java - 是否有任何框架可以将一个节点生成的数据与不可靠网络中的所有其他节点同步?

c++ - 将 vector 末尾的删除优化为调整大小

c++ - (n*2-1)%p : avoiding the use of 64 bits when n and p are 32 bits

c++ - std::promise set_exception 两次导致段错误

c++ - 清除具有未知递归级别的嵌套关联容器的初始化

c++ - Telegram编译过程:No rule to make target '/usr/lib/libicutu.a'

c++ - 网络 2D 游戏的滞后补偿

c++ - 自动扣除失败并显示消息 "inconsistent deduction for auto return type"

c++ - c++ 和 vb.net 应用程序之间的进程间通信

c++ - 问到c++11中的多线程矩阵乘法