Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
#1

В чем смысл создания шаблона с заранее известным передаваемым типом - C++

24.10.2012, 09:01. Просмотров 486. Ответов 12
Метки нет (Все метки)

Видел шаблоны типа:

C++
1
2
3
4
template<int N>
struct fact{
   static const int v = fact<n-1>::v * n;
};
Объясните мне, в чем смысл создавать шаблон с заранее известным передаваемым типом?
Мне казалось, что шаблоны существуют для того, что бы сделать передаваемый тип любым.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2012, 09:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В чем смысл создания шаблона с заранее известным передаваемым типом (C++):

В чем разница между типом функции и типом возвращаемого значения? - C++
Читаю статью https:// code-live. ru/post/cpp-functions/ (ссылку изменил дабы не делать рекламу) Там написано - Любая функция...

Кортеж с абстрактным типом как параметр шаблона + smart_ptr - C++
Имеем кортеж (std::tuple) с абстрактным типом, параметризуем этим шаблон класса, экземпляров кортежа нигде не создаём. Создаём экземпляры...

В чем смысл полиморфизма - C++
Объясните, пожалуйста, смысл полиморфизма. Не могу никак вникнуть. Где и как он используется? И примерчик, пожалуйста

В чем смысл указателей? - C++
Дорогие друзья, не могу понять смысл указателей в С++? Для чего они нужны? Если не трудно на реальном примере объясните ,пожалуйста.

Ошибка при попытке создания шаблона - C++
В чём ошибка? Функции Map::isGardenWithoutWallFlag, Map::setNothing, Map::incrementRoad, Map::setFlagWall имеют действительно такие...

В чем смысл виртуальных функций? - C++
Читаю книгу Джесс Либерти 'С++ за 21 день', не смотря на глупое название, книга очень грамотная и мне очень нравится... но прочитав...

12
Kastaneda
Нарушитель
Эксперт С++
4669 / 2873 / 232
Регистрация: 12.12.2009
Сообщений: 7,307
Записей в блоге: 2
Завершенные тесты: 1
24.10.2012, 09:12 #2
http://www.solarix.ru/for_developers/cpp/cpp-metaprogramming.shtml
там же есть ссылка http://www.solarix.ru/for_developers/cpp/snippets/factorial.shtml
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
24.10.2012, 09:22  [ТС] #3
Kastaneda, хм. То есть через шаблоны можно передавать константы?
0
Kastaneda
Нарушитель
Эксперт С++
4669 / 2873 / 232
Регистрация: 12.12.2009
Сообщений: 7,307
Записей в блоге: 2
Завершенные тесты: 1
24.10.2012, 09:38 #4
Ну да, например класс std::array<class T, size_t N>
Пример создания объекта:
C++
1
std::array<int, 10> arr; // создаем массив int из 10 элементов
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
24.10.2012, 09:55  [ТС] #5
Kastaneda, но должна же быть разница между: передать константу через шаблон и как аргумент?

Через шаблон все будет быстрее, так?
0
Kastaneda
Нарушитель
Эксперт С++
4669 / 2873 / 232
Регистрация: 12.12.2009
Сообщений: 7,307
Записей в блоге: 2
Завершенные тесты: 1
24.10.2012, 10:01 #6
Цитата Сообщение от Kgfq Посмотреть сообщение
Через шаблон все будет быстрее, так?
Через шаблон - на этапе компиляции, как аргумент - на этапе выполнения. Это разные вещи.
Я так понял имеется ввиду аргумент функции?
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
24.10.2012, 10:03 #7
Объясните мне, в чем смысл создавать шаблон с заранее известным передаваемым типом?
Шаблону всегда передается заранее известный параметр, так как шаблон генерируется компилятором на основе типов и значений параметров.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
24.10.2012, 10:04  [ТС] #8
Kastaneda, да, имеется ввиду как аргумент функции.

В итоге получится, что шаблон использует переданное значение на этапе компиляции, а это быстрее, чем если бы данные передавались во время исполнения. Так?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.10.2012, 10:33 #9
Kgfq, Что значит "быстрее"? Этап компиляции и этап выполнения принципиально разные вещи
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
24.10.2012, 10:36  [ТС] #10
ForEveR, мне казалось, программисты ориентируются на скорость работы программы у пользователя
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.10.2012, 10:54 #11
Kgfq, Ну как бэ, если размышлять так - то естественно работает программа быстрее.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
24.10.2012, 11:05  [ТС] #12
ForEveR, Вы размышляете иначе?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.10.2012, 12:08 #13
Kgfq, Я разработчик. Мне так же важно сколько времени программа собирается и переносить любые вычисления, которые могут выполниться во время компиляции на этот этап - это конечно круто, однако время сборки увеличивается прямо пропорционально. Собственно, попробуйте использовать boost::spirit и увидите, сколько ваш исходный код будет компилироваться. Для маленькой программы - не критично, а вот собирать некий мета-проект в тысяч 10 файлов - удовольствие ниже среднего.
0
24.10.2012, 12:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 12:08
Привет! Вот еще темы с ответами:

В чем смысл косой черты в #include - C++
пытаюсь собрать проект QTшный в VS2010 собственно что означает такая косая? что-то с путём к хедеру? #include &quot;qwt/qwt_plot.h&quot; ...

Что такое Nod и в чем его смысл? - C++
Что такое Nod и в чем его смысл?

В чем смысл двух перегрузок одного оператора? - C++
Объясните, в чем здесь смысл перегрузки: inline bool operator == ( const char *Name ) const { return this-&gt;Name.c_str( )...

Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической? - C++
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru