Я хотел бы изменить существующий конструктор классов:
template< typename T, typename... Ts >
MyClass( std::vector<T>& head, Ts& ...tail );
Чтобы можно было указать флаг обработки:
template< typename T, typename... Ts >
MyClass( MyEnum myEnum, std::vector<T>& head, Ts& ...tail );
Это прекрасно работает, однако мне было интересно, есть ли способ указать его как самый правый аргумент и, возможно, со значением по умолчанию. Я никогда не видел таких вариационных шаблонов, как это, но опять же, я не могу найти ничего явно, заявляя, что их не может быть. Я пробовал:
template< typename T, typename... Ts >
MyClass( std::vector<T>& head, Ts& ...tail, MyEnum myEnum );
...
MyClass myClass( dataA, dataB, dataC, MyEnum::VALUE );
Но компилятор ему не нравится, я предполагаю, что это связано с тем, как изменяются вариативные шаблоны и что они должны быть самым правым параметром?
Возможно ли это в С++ 11?