Дублирование параметров специализации шаблона c ++ - PullRequest
0 голосов
/ 18 мая 2018

Недавно я заметил следующую проблему со специализациями шаблонов.

Обратите внимание, если у нас есть следующая специализация для f, а имя параметра шаблона может быть очень длинным, возможно, полученным из других шаблонов.

template <class T> void f(T t) {}

template <>
void f<VeryLongType>(VeryLongType t)
{
    using T = VeryLongType;
    // ...
}

Обратите внимание, что это очень длинное имя типа дублируется 3 раза.Также, если f возвращает значение этого типа, то будет введено другое дублирование (auto будет обходным путем).

Мне интересно, существует ли какой-то упрощенный синтаксис для этого, чтобы не было дублированиянеобходимо?

Может быть так:

template <>
void f<T = VeryLongType>(T t)
{
   // ...
}

1 Ответ

0 голосов
/ 18 мая 2018

Вам не нужно явно указывать тип специализации, например:

template <>
void f(VeryLongType t)
{
    using T = VeryLongType;
    // ...
}

- это хорошо.Псевдоним типа можно сократить на decltype(t), если VeryLongType действительно очень длинный ...

using T = decltype(t); // makes it more generic too
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...