Если я ожидаю, что параметр шаблона шаблона будет иметь один аргумент, я мог бы объявить его следующим образом:
template<template<typename> class T>
struct S {
T<int> t_;
//other code here
}
однако, если позже я захочу предоставить параметр шаблона шаблона, который принимает два аргумента, где второй имеет значение по умолчанию (например, std::vector), T<int> t_;
все равно будет работать, но шаблон не будет соответствовать template<typename> class T
. Я мог бы исправить это, превратив template<typename> class T
в вариативный шаблон шаблона template<typename...> class T
. Теперь мой код более гибкий.
Должен ли я в будущем сделать все параметры моего шаблона вариативными? Есть ли какая-то причина, по которой я не должен этого делать (при условии, что поддержка С++ 11 уже требуется для моего кода по другим причинам)?