Далее передайте параметры c - PullRequest
0 голосов
/ 10 марта 2020

У меня есть метод регистрации, называемый trace:

template <typename... Args>
void trace(const LogLevel ll, QString&& msg, Args... args)
{
     // operate on input data
}

Теперь я хотел бы создать функцию-оболочку с тем же интерфейсом, которая бы вызывала мою trace функцию:

template <typename... Args>
void wrapper(const LogLevel ll, QString&& msg, Args... args)
{
     trace(ll, std::move(msg), args);
}

Но это не скомпилируется. Я думаю, что мне не разрешено проходить args таким образом. Как реализовать эту функцию?

1 Ответ

4 голосов
/ 10 марта 2020

Вам необходимо расширить пакет, как

template <typename... Args>
void wrapper(const LogLevel ll, QString&& msg, Args... args)
{
     trace(ll, std::move(msg), args...);
}

Также обратите внимание, что вы также можете использовать идеальную пересылку, чтобы не создавать копий. Это будет выглядеть как

template <typename... Args>
void wrapper(const LogLevel ll, QString&& msg, Args&&... args)
{
     trace(ll, std::move(msg), std::forward<Args>(args)...);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...