ИнформацияШаблон Алиас с Значение по умолчанию
Я пытаюсь использовать шаблон псевдоним для улучшения readabilty моего кода. В идеале я хотел бы, чтобы псевдоним имел аргумент по умолчанию, поэтому, если я не использую шаблон, он использует значение по умолчанию (точно с помощью функций шаблона и классов шаблонов).
Код будет выглядеть
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;
}
Компилятор (г ++ 4.7 в данном случае) вполне доволен включением = double
в определении псевдонима, но это, кажется, то это игнорировать.
Я пробовал что-то вроде «специализирующегося» на псевдониме, но там компилятор не хватил.
Вопрос
Почему компилятор принимает значение по умолчанию в Defintion, если мы не имеем права использовать его? Во-вторых, есть ли способ добиться этого?
Мотивация
Этот пример очень простой, но в моем реальном коде псевдоним позволит сэкономить много печатать (есть более чем один параметр шаблона)
Не могли бы вы объяснить, почему это так? Если бы я создал это непосредственно из 'mystruct', я могу просто набрать' mystruct MyStructWithDouble',? – Dan
@ Dan: Нет, вы не можете, по крайней мере, не без нестандартного расширения компилятора. Например, GCC говорит 'ошибка: недопустимое использование имени шаблона 'mystruct' без списка аргументов' – JohannesD
Моя ошибка. Есть ли причина для этого? Может ли компилятор не сказать, что 'myalias' означает то же самое, что' myalias <> '? И есть ли способ «обмануть» это поведение от компилятора? – Dan