Здравствуйте, race1, Вы писали:
R>Функция определена в .h, а реализация в .cpp. В приведённом коде то что до "//" — это .h, а после — .cpp
Не совсем верный, но краткий ответ — шаблоны нужно определять в заголовках.
Замечание по терминологии: template method — это design pattern, к шаблонам не имеющий отношения.
Здравствуйте, Programmierer AG, Вы писали:
R>>Функция определена в .h, а реализация в .cpp. В приведённом коде то что до "//" — это .h, а после — .cpp PA>Не совсем верный, но краткий ответ — шаблоны нужно определять в заголовках.
Т.е. определять? Объявлять? У меня же так и есть, шаблон (design pattern) объявляется в .h
PA>Замечание по терминологии: template method — это design pattern, к шаблонам не имеющий отношения.
Здравствуйте, race1, Вы писали:
R>Здравствуйте, Programmierer AG, Вы писали:
R>>>Функция определена в .h, а реализация в .cpp. В приведённом коде то что до "//" — это .h, а после — .cpp PA>>Не совсем верный, но краткий ответ — шаблоны нужно определять в заголовках.
R>Т.е. определять? Объявлять? У меня же так и есть, шаблон (design pattern) объявляется в .h
определить функцию = написать ее тело.
на самом деле, если ты инстанцируешь функцию для какого-то типа в каком-нть объектнике А, то потом для этого же типа ты можешь звать ее из других объектников, в которых тела не видно — линкер возьмет ее реализацию из объектника А.
Фактически, это — технология как скрытия исходников шаблонов, так и ограничения инстанцируемых типов. Правда, человек и сам может для других типов написать реализацию, но никто этим в здравом уме заниматься не будет :)
Здравствуйте, race1, Вы писали:
PA>>Не совсем верный, но краткий ответ — шаблоны нужно определять в заголовках. R>Т.е. определять? Объявлять? У меня же так и есть, шаблон (design pattern) объявляется в .h
Нет, именно определять.
А словосочетание design pattern ты понял неправильно . Это название для типового решение проектирования (поиск по GoF 1995). Есть такой шаблон проектирования (т.е. design pattern) — "template method", заключающийся в определении в базовом классе невиртуальной функции, реализованной в терминах одной или нескольких виртуальных. А для твоего вопроса правильный термин — template member function.
Programmierer AG,
> для твоего вопроса правильный термин — template member function.
Почти: member function template. Т.е. "шаблон функции-члена", а не "шаблонная функция-член". В устаревшей терминологии template member function означало конкретные инстанцированные экземпляры шаблона.
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
>> для твоего вопроса правильный термин — template member function. ПК>Почти: member function template. Т.е. "шаблон функции-члена", а не "шаблонная функция-член". В устаревшей терминологии template member function означало конкретные инстанцированные экземпляры шаблона.
Эх, все моя вредная привычка умничать не по существу .
Здравствуйте, Programmierer AG, Вы писали:
PA>Здравствуйте, race1, Вы писали:
PA>>>Не совсем верный, но краткий ответ — шаблоны нужно определять в заголовках. R>>Т.е. определять? Объявлять? У меня же так и есть, шаблон (design pattern) объявляется в .h PA>Нет, именно определять.
Вот блин... неудобно... А если класс тоже шаблонный, его методы должны определятся в .h?
Здравствуйте, race1, Вы писали:
R>Вот блин... неудобно... А если класс тоже шаблонный, его методы должны определятся в .h?
Да, но можно в начале файла объявить используемые шаблоны, а потом дать их определение.
Можно также определение дать в .cpp-файле и включить его в конце .h-файла, то есть прямо наоборот: не .h в .cpp, а .cpp в .h, и #include не в начале, а в конце.