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

Явное создание экземляра (шаблоны функций) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
neurosis
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 15
15.11.2011, 19:18     Явное создание экземляра (шаблоны функций) #1
Допустим есть шаблон
C++
1
2
template<typename T> void foo(T);
...
Для чего может понадобиться делать явное создание экземпляра?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2011, 19:18     Явное создание экземляра (шаблоны функций)
Посмотрите здесь:

C++ шаблоны функций на С++
C++ Шаблоны функций
Шаблоны функций C++
C++ Шаблоны функций
Шаблоны функций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
15.11.2011, 19:22     Явное создание экземляра (шаблоны функций) #2
Цитата Сообщение от neurosis Посмотреть сообщение
Допустим есть шаблон
C++
1
2
template<typename T> void foo(T);
...
Для чего может понадобиться делать явное создание экземпляра?
По нескольким причинам. Во-первых, это играет роль при выборе перегруженных функций, так как явное специализация функции имеет преимущество перед шаблонной.
Во-вторых, специализация функции может отличаться по реализации от шаблонной.
В-третьих,это упрощает работу компилятору и редактору связей. Например, вместо export шаблона компилятор может подставить конкретную реализацию функции.
neurosis
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 15
15.11.2011, 19:47  [ТС]     Явное создание экземляра (шаблоны функций) #3
Цитата Сообщение от Сыроежка Посмотреть сообщение
По нескольким причинам. Во-первых, это играет роль при выборе перегруженных функций, так как явное специализация функции имеет преимущество перед шаблонной.
Во-вторых, специализация функции может отличаться по реализации от шаблонной.
В-третьих,это упрощает работу компилятору и редактору связей. Например, вместо export шаблона компилятор может подставить конкретную реализацию функции.
Не, зачем явная специализация нужна понятно. Я спрашивал про это
C++
1
template void foo<int>(int);
Т.е. тут создается экземпляр для int по шаблону.
Сыроежка
Заблокирован
15.11.2011, 19:49     Явное создание экземляра (шаблоны функций) #4
Цитата Сообщение от neurosis Посмотреть сообщение
Не, зачем явная специализация нужна понятно. Я спрашивал про это
C++
1
template void foo<int>(int);
Т.е. тут создается экземпляр для int по шаблону.
Так я вам про это и написал! Что не понятно-то?!!! Это есть специализация функции для целочисленного параметра. зачем это сделано, я вам описал.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.11.2011, 19:52     Явное создание экземляра (шаблоны функций) #5
Цитата Сообщение от neurosis Посмотреть сообщение
Т.е. тут создается экземпляр для int по шаблону.
Уже написали. Это единственный способ экспортировать шаблонную функцию из библиотеки.
Экспорт шаблонов практически никто реализовать не смог и в новом стандарте эту теоретическую возможность убрали. Поэтому теперь явное инстанцирования шаблонной функции это единственная возможность её экспорта.
neurosis
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 15
15.11.2011, 21:06  [ТС]     Явное создание экземляра (шаблоны функций) #6
Цитата Сообщение от Deviaphan Посмотреть сообщение
экспортировать шаблонную функцию из библиотеки
Сори за нубство, но что это значит?)
Разве шаблоны функций не в хедерах определяются и затем эти хедеры инклюдят нуждающиеся в оных функциях файлы?

Добавлено через 8 минут
В-третьих,это упрощает работу компилятору и редактору связей. Например, вместо export шаблона компилятор может подставить конкретную реализацию функции.
Ну в итоге-то ведь один код генерируется? Или я не прав?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 06:07     Явное создание экземляра (шаблоны функций) #7
Цитата Сообщение от neurosis Посмотреть сообщение
что это значит?
Это значит, что если хочешь разместить код этих функций в DLL, а не открывая их код пользователю, то сделать это можно только явно инстанцировав функции для конкретных типов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 01:50     Явное создание экземляра (шаблоны функций)
Еще ссылки по теме:

Шаблоны функций C++
C++ Шаблоны функций
шаблоны функций C++

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

Или воспользуйтесь поиском по форуму:
Artimosha
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 12
16.07.2013, 01:50     Явное создание экземляра (шаблоны функций) #8
Цитата Сообщение от Сыроежка Посмотреть сообщение
По нескольким причинам. Во-первых, это играет роль при выборе перегруженных функций, так как явное специализация функции имеет преимущество перед шаблонной.
Во-вторых, специализация функции может отличаться по реализации от шаблонной.
В-третьих,это упрощает работу компилятору и редактору связей. Например, вместо export шаблона компилятор может подставить конкретную реализацию функции.
явное создание экземпляра и явная специализация - это разные вещи.
Yandex
Объявления
16.07.2013, 01:50     Явное создание экземляра (шаблоны функций)
Ответ Создать тему
Опции темы

Текущее время: 00:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru