Как разыграть перенаправленный пакет параметров? - PullRequest
0 голосов
/ 07 марта 2019

Я заменяю printf(/*heterogenous pack of arguments*/) на LogMessage(/*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);

Почему эта работа не может (в первую очередь, не должно произойти приведение)? Как это сделать правильно?

1 Ответ

1 голос
/ 07 марта 2019

Проблема была в вызове LogMessage: строка формата должна быть wstring, следовательно, отсутствие L в L" GPU Max Clock rate: %.0f MHz (%0.2f GHz)\n" вызвало ошибку.

...