powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / шаблонная ф-ия
10 сообщений из 10, страница 1 из 1
шаблонная ф-ия
    #34934311
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как правильно отделить в шаблонной ф-ии объявление от реализации, так не понимает:

Код: plaintext
1.
2.
3.
4.
// a.h

template <typename T>
void numTOstring(std::string &res_str, const T num);

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// a.cpp
#include "a.h"


/*
Конвертирует число в std::string
*/
template <typename T>
void numTOstring(std::string &res_str, const T num)
{
	std::ostringstream oss;
	oss << num;
	res_str += oss.str();
}// numTOstring()
...
Рейтинг: 0 / 0
шаблонная ф-ия
    #34934333
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должно. Дай угадаю - ругается линкер, верно?
...
Рейтинг: 0 / 0
шаблонная ф-ия
    #34934335
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не поймет, все только в h? иначе невозможно инстанциирование
...
Рейтинг: 0 / 0
шаблонная ф-ия
    #34934343
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhДолжно. Дай угадаю - ругается линкер, верно?
верно
...
Рейтинг: 0 / 0
шаблонная ф-ия
    #34934366
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik AkhДолжно. Дай угадаю - ругается линкер, верно?
верно

тода смотри ответ blinded. :)
...
Рейтинг: 0 / 0
шаблонная ф-ия
    #34934384
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. разделять их нельзя никак?
...
Рейтинг: 0 / 0
шаблонная ф-ия
    #34934412
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это зависит от реализации компилятора.... Есть в которых можно, а есть в которых нельзя.
Читать http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Template-Instantiation.html]здесь[/url
...
Рейтинг: 0 / 0
шаблонная ф-ия
    #34934415
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал так:

1. Удалил файл .cpp из проекта, но оставил физически.
2. Вконце файла .h сынклудил .cpp

по сути тоже самое, но все же больше напоминает раздельное объявление

что интересно, объявленная вместе с телом ф-ия в .h собирается нормально, но только если она шаблонная
...
Рейтинг: 0 / 0
шаблонная ф-ия
    #34934433
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrikт.е. разделять их нельзя никак?

реализации шаблонов в объектный файл не включаются - это не функции, а некий прототип. В объектные файлы включаются их частные инстанцированные варианты. Сколько различных версий ты инстанцируешь, для int, для double, для MyBiGSuperPuperClassForever, столько их и включиться. Как компилятор в твоем случае может догадаться, что нужно скомпилировать реализацию шаблона для типа, который ты будешь использовать. Ответ - никак. Следовательно, надо включать реализацию шаблона в код, который его использует. Т.о. будет происходить автоматическое инстанцирование.
...
Рейтинг: 0 / 0
шаблонная ф-ия
    #34934453
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrikчто интересно, объявленная вместе с телом ф-ия в .h собирается нормально, но только если она шаблонная

Инстанцировнные функции в объектном файле имеют "слабое" связывание, в отличии от обычных, поэтому, линковщик и не ругается, а выбирает, ту, которую на душу положит. Можно конечно, предположить, что он для модуля будет давать больше приоритет функции, которая находиться в этом же модуле, но рисковать не стоит. Я взял за правило иметь одну реализацию в проете, т.е. реализацию шаблонной функции помещать в заголовочный файл (вариант, как ты инклудишь сpp с реализаций).
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / шаблонная ф-ия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]