Андрей Александреску сделал отличный доклад под названием:Variadic Templates is Funadic .
Он представляет следующие 3 расширения, которые немного отличаются:
template void fun( Ts... vs ) {
gun( A::hun(vs)...);
gun( A::hun(vs...));
gun( A::hun(vs)...);
}
Он объясняет:
Зов 1:
Раскрывает все Ts
для установления class A
, Затем вызывает hun(vs)
Затем снова расширяет все параметры при передаче их вgun
Вызов 2:
Раскрывает все Ts
и все vs
отдельно
Вызов 3:
Расширяет в шаге блокировки, т.е. :Разверните аргумент 1 из Ts
и аргумент 1 из vs
Разверните аргумент 2 Ts
и аргумент 2 vs
Разверните аргумент n из Ts
и аргумент n из vs
. Другие обсуждения вариативных шаблонов, по-видимому, охватывают только простые вариативные шаблоны классов и вариативные функции, такие как typesafe printf и т. д. Я не уверен, как эти различные типы расширения влияют на код и где каждый тип будет полезен.
Есть ли у кого-нибудь примеры, демонстрирующие применение каждого типа расширения?