Псевдоним шаблона со значением по умолчанию
Информация
Я пытаюсь использовать псевдоним шаблона, чтобы улучшить читабельность моего кода. В идеале я хотел бы, чтобы у псевдонима был аргумент по умолчанию, так что если я опускаю шаблон, он использует значение по умолчанию (именно с шаблонными функциями и классами шаблонов).
Код будет выглядеть так
template<typename T = double>
struct mystruct {};
template<typename T = double> using myalias = mystruct<T>;
int main(void) {
myalias MyStructWithDouble; // causes compilation error
myalias<int> MyStructWithInt;
return 0;
}
Компилятор (в данном случае g++ 4.7) вполне доволен включением = double
в определении псевдонима, но, похоже, игнорировать это.
Я попробовал что-то вроде "специализировать" псевдоним, но компилятор не справился.
Вопрос
Почему компилятор принимает значение по умолчанию в определении, если нам не разрешено его использовать? Во-вторых, есть ли способ добиться этого?
мотивация
Этот пример очень прост, но в моем реальном коде псевдоним сэкономит много времени на печать (имеется более одного параметра шаблона)
1 ответ
Как и в случае с шаблонами классов, вам все равно нужно предоставить пустой список аргументов шаблона:
myalias<> MyStructWithDouble; // compiles