Variadic Templates -различные типы расширения

Андрей Александреску сделал отличный доклад под названием: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 и т. д. Я не уверен, как эти различные типы расширения влияют на код и где каждый тип будет полезен.

Есть ли у кого-нибудь примеры, демонстрирующие применение каждого типа расширения?

11
задан Xeo 10 March 2012 в 22:51
поделиться