Я хотел бы сделатьКак вызвать функцию во всех вариационных шаблонных аргументах?
template<typename... ArgTypes> void print(ArgTypes... Args)
{
print(Args)...;
}
И есть это будет эквивалентно этому довольно громоздкого рекурсивной цепи:
template<typename T, typename... ArgTypes> void print(const T& t, ArgTypes... Args)
{
print(t);
print(Args...);
}
следуют явные специализации одного параметра для каждого типа я хотел бы напечатать.
«Проблема» с рекурсивной реализацией заключается в том, что создается много избыточного кода, поскольку каждый рекурсивный шаг приводит к новой функции аргументов N-1
, тогда как код, который я хотел бы иметь, будет генерировать код для один N
-arg print
функции, и иметь не более N
специализированных print
функции.
«но ничего не хранит». Компилятор, скорее всего, выделит для этого столько же пространства, поскольку аргументы также нуждаются в пространстве (и, возможно, больше, для информации о вызовах и т. д.). И если вы спекулируете на том, чтобы получить оптимизацию, я думаю, что хранилище массивов точно так же будет оптимизировано. – Xeo
Забавно, как более продвинутый C++ неизбежно приведет к более продвинутым хакам, чтобы обойти все, что невозможно в ясном и сжатом виде. Спасибо, что написали это! – rubenvb
абсолютно блестящий ответ :) – Gabriel