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

Как правильно разделить файл в шаблонами? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ побитовый анализ переменной http://www.cyberforum.ru/cpp-beginners/thread354774.html
Привет, товарищи. Есть вот такая задача: Сосчитать разницу между всеми единичными и нулевыми значениями слова (8 бит). Например, вход 1100 1100 выход 0000 0000. вход 1111 1111 выход 0000 1000 вариант с A={0}, B={1} A > B не предусмотрен. Может кто подкинет идею?
C++ Graphical library Всем привет! Подскажите пожалуйста графическую библиотеку. (Linux-> C++ -> Code Blocks). Желательно схожее с Visual Studio, где есть дизайнер элементов управления, примерно как Visual Studio + WinForms http://www.cyberforum.ru/cpp-beginners/thread354758.html
C++ Массив C++
Нужна помощь,заранее спасибо. Дан вещественный массив n от 20,определить для каждого массива является ли он возрастающим послед. и вычисления средне-геометрического всех положительных элементов массива.
Разбираю списки .Правильно ли понял ? C++
А если нет - укажите где ошибки у меня . и 1) Правильный ли код с точки зрения понимания ? 2) Как бы выглядела более оптимизированная версия ?
C++ Что за оператор ->? http://www.cyberforum.ru/cpp-beginners/thread354722.html
Здравствуйте, мой вопрос поместился в заголовок:), но я всё же задам его и в сообщении: что за оператор ->?
C++ Ввод двух чисел с клавиатуры и вывод их на экран 126(16 с с )и 11110001010(2 с с ) подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2011, 18:43  [ТС]     Как правильно разделить файл в шаблонами?
Согласен, что смысла нет. До настоящих смыслов я ещё не дошёл. Дошёл до главы "Раздельная компиляция". Там пишется:"...Таким образом, исходную программу можно разбить на три части:
- Заголовочный файл, содержащий объявления структур и прототипы функций, использующих эти структуры.
- Файл с исходным кодом, содержащий код функций, работающих со структурами.
- Файл с исходным кодом, содержащий код, осуществляющий вызовы этих функций...
Ещё:"...В заголовочных файлах обычно содержатся следующие элементы:
- Прототипы функций.
- Символьные константы, определённые с помощью директивы #define или const.
- Объявления структур.
- Объявления классов.
- Объявления шаблонов.
- Встроенные функции..."

Стал пробовать. С функциями, структурами всё получилось, а с шаблонами нет. Разделил прототип шаблона и определение его (как с функциями делал) не получается. Вот и возник вопрос. Написано, что в заголовочном следует разместить объявление шаблона. Под этим, скорее всего, подразумевается прототип шаблона вместе с определением.

Добавлено через 1 час 11 минут
Вроде бы разобрался. Получается так. Когда компилятор встречает в каком-либо файле исходного кода вызов шаблонной функции с некими аргументами, то он создаёт экземпляр этой функции под этот тип аргументов, а для этого, в этом файле должно присутствовать определение шаблона (получается, что у определения шаблона видимость в пределах файла). После этого, если компилятор встречает в другом файле исходного кода вызов шаблонной функции с таким же типом аргументов, то он использует ранее созданный экземпляр функции, и поэтому в этом файле ему уже не нужно определение шаблона (только прототип). Но что интересно, это не касается определения специализации шаблона. Она видна во всех файлах (внешнее связывание), и именно она давала ошибку двойного определения, если присутствовала в заголовочном файле и этот файл включался в несколько файлов исходного кода. Определение специализаци шаблона (так же как определения функций) нужно помещать в отдельный файл, а в заголовочном оставлять только прототипы и определения шаблонов. Тогда такой заголовочный файл можно включать в любое колличество файлов исходного кода.
 
Текущее время: 18:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru