4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
||||||||||||||||
1 | ||||||||||||||||
Способы объявления шаблона12.08.2015, 03:28. Показов 4812. Ответов 21
Метки нет (Все метки)
Здравствуйте!
Возникли непонятки в ходе изучения шаблонов. Взглянем на код:
Прикол в том, что если строку 5 изменить следующим образом:
0
|
12.08.2015, 03:28 | |
Ответы с готовыми решениями:
21
Все виды(способы) объявления переменных, функций, классов, типов и т.п. на С++ Используя одну переменную цикла укажите возможные способы объявления заголовка счетного цикла. Какие есть способы объявления аргументов функций? Какие способы самые удобные/рациональные способы регистрации ошибок есть? |
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
|
|
12.08.2015, 03:34 | 2 |
Сообщение было отмечено Ilot как решение
Решение
Оба объявления эквивалентны - используйте то, что удобнее для вас.
1
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
|
12.08.2015, 03:40 [ТС] | 3 |
Благодарю!
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
12.08.2015, 09:30 | 4 |
Сообщение было отмечено BumerangSP как решение
Решение
Когда Страуструп вводил шаблоны, то пожадничал ввести новое ключевое слово и применил существующее - class.
Когда же ввели новое ключевое слово typename (для других целей), то разрешили его и здесь использовать как более подходящее. Вот у Алены про это. Из этой записи видно, что в этом качестве новое ключевое слово не сразу прижилось.
1
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
||||||
12.08.2015, 09:37 | 5 | |||||
Alexey104, кстати говоря, при вызовах функциональных шаблонов не обязательно указывать точный тип шаблона. Типы переменных выводятся сами. Так что вызов функции можно оформить классически:
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
12.08.2015, 10:05 | 6 |
технически разницы нет никакой.
однако, 'typename' обозначает тип (любой, например - int) в то время, как 'class' предполагает что T - это все таки именно какой то класс, или структура. в итоге, некоторые люди используют всегда 'class'. другие - всегда 'typename' а некоторые, как я: использую 'typename', если шаблон рассчитан для работы с любыми типами, либо 'class' если ожидаются только пользовательские типы.
1
|
Неэпический
|
||||||
12.08.2015, 10:11 | 7 | |||||
Однако, стоит отметить, что если параметр шаблона сам по себе является шаблоном, то там синтаксис требует class:
1
|
ForEveR
|
12.08.2015, 10:18
#8
|
Не по теме: Croessmah, Пока да, однако в С++1z будет можно и typename.
0
|
Croessmah
|
12.08.2015, 10:20
#9
|
Не по теме: ForEveR, можно ссылочку на источник? :)
0
|
Croessmah
|
12.08.2015, 10:23
#10
|
Не по теме: ForEveR, уже нашел. Да, в новом черновике так:
0
|
ct0r
|
12.08.2015, 10:38
#11
|
Не по теме: Croessmah, эта штука кстати реализована в gcc и clang. Так что уже можно пользоваться. Даже без ключа с++1z будет всего лишь ворнинг, не ошибка.
0
|
Croessmah
|
12.08.2015, 10:41
#12
|
Не по теме: ct0r, warning тоже не приятен :) тем более, у меня чаще всего -pedantic-errors
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
12.08.2015, 11:06 | 13 | |||||
эээ, не понял...
http://rextester.com/EVJGFY86580
чет я не вижу никаких ворнингов. а роббит это и в студийном компиляторе тоже
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
12.08.2015, 11:07 | 14 | |||||
hoggy, Не тот кейс.
Попробуй
1
|
Tulosba
|
12.08.2015, 12:12
#15
|
0
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
||||||
12.08.2015, 19:37 [ТС] | 16 | |||||
Всем спасибо за участие!
Тему усёк. Добавлено через 2 часа 6 минут Хотелось бы вернуться к вопросу. Увидел в некоторых кодах что-то типа этого:
Желательно с простенькими примерами. Добавлено через 1 час 17 минут С этим разобрался, проехали. Появился новый вопрос: при попытке откомпилировать код, содержащий шаблон с параметрами по умолчанию, gcc выдаёт следующее сообщение: ошибка: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11 Что такое '-std=c++11' и '-std=gnu++11' ?
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
12.08.2015, 20:10 | 17 |
Ключи компилятора для включения поддержки нового стандарта С++.
Добавлено через 48 секунд Раньше в С++ нельзя было делать шаблонные параметры по умолчанию у функций.
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
12.08.2015, 20:11 | 18 |
это - ключи компиляции.
они сообщают компилятору, что необходима поддержка с++11. (относительно новый стандарт языка) дело в том, что в более ранних версиях стандарта, параметры по умолчанию для функций не поддерживались. их поддержка началась с с++11. компилятор говорит вам: вы не указали эти ключи, а значит он пытается компилировать по более раннему стандарту, и там это не работает. если хотите, что бы работало, нужно указать ключик.
1
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
||||||
13.08.2015, 18:53 [ТС] | 19 | |||||
Спасибо, добрые Люди!
С ключиками компилируется успешно. Добавлено через 22 часа 39 минут В очередной раз возвращаясь к вопросу: Интересна данная возможность языка: Что-то у меня мозгов не хватает, чтобы разобраться с этим самостоятельно. Пытаюсь откомпилировать нечто вроде:
Как создать объект класса 'Object2', содержащий конкретизированный шаблон класса 'Object1' в качестве переменной-члена?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
13.08.2015, 18:57 | 20 | ||||||||||
1
|
13.08.2015, 18:57 | |
13.08.2015, 18:57 | |
Помогаю со студенческими работами здесь
20
Для использование шаблона переменной требуется список аргументов шаблона Gtest, доступ к элементам базового класса-шаблона без указания параметров шаблона. баг или фича? Определение метода-шаблона за пределами шаблона класса Редактирование шаблона сайта и шаблона письма Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |