Часто використовують рекурсивний виклик варіативних шаблонів. Самі варіаційні параметри не є доступними для реалізації функції або класу. Тому для реалізації заміни звичного printf через варіативний шаблон у C++11 типовим підходом буде такий:
// базовий варіантvoidprintf(constchar*s){while(*s){if(*s=='%'){if(*(s+1)=='%'){++s;}else{throwstd::runtime_error("неправильний формат рядка: відсутні аргументи");}}std::cout<<*s++;}}// рекурсивнийtemplate<typenameT,typename...Args>voidprintf(constchar*s,Tvalue,Args...args){while(*s){if(*s=='%'){if(*(s+1)=='%'){++s;}else{std::cout<<value;s+=2;// зрозуміло, що це працюватиме лише з 2-х символьними специфікаторами ( %d, %f, і т.п. ); але не з %5.4f і т.п.printf(s,args...);// буде викликатися навіть для *s рівного nullptr, але не робитиме нічого, просто ігноруватиме аргументиreturn;}}std::cout<<*s++;}}
Зауважте, що побудована з застосуванням варіативного шаблону версія printf викликає себе рекурсивно або (коли список аргументів args… буде порожній) викликає базовий варіант.
Приклад
Приклад короткої програми на мові С++ де застосовано варіативний шаблон, що підраховує суму змінного числа аргументів:
У стандарті C++17 з'явились вирази згортання (англ.fold expressions), що значно полегшують використання технології варіативних шаблонів. Наприклад, з їх використанням код функції SUM може мати такий вигляд: