powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Специализация шаблона. Ступор о_о
4 сообщений из 4, страница 1 из 1
Специализация шаблона. Ступор о_о
    #39256054
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут дан ответ , который у меня не работает.

Если я в одном cpp файле объявляю класс и два его шаблонных метода, потом в main всё это зову, всё ок.
Но стоит мне нормально написать код, вынести класс в *.h, как линкер перестаёт дружить с компилятором >_<

C.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class C1
{
public:
	template <typename T> void f(T t);
};
template<typename T> void C1::f(T t)
{
}


специализацию надо вынести в cpp, всё же таки это "живой" код (иначе при нескольких вложениях линкер выдаёт ошибку).
C.cpp
Код: sql
1.
2.
3.
template<>void C1::f<int>(int t)
{
}



далее

App.cpp

Код: plaintext
1.
2.
C1 c;
c.f(1);



линкер на App.obj выдаёт ошибку, про то, что f<int> уже определена в С.obj, т.е. при встрече в коде c.f(1); компилятор берёт шаблон и генерирует ещё один метод f для int-а. Потом линкер находит его же копию в C.obj и выдаёт эту ошибку. Что я делаю не так?
Среда: MS VS 2013
...
Рейтинг: 0 / 0
Специализация шаблона. Ступор о_о
    #39256056
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
млин, когда написал, допёрло подсказать компилятору:

C.h
Код: plaintext
1.
2.
3.
//...

template<>void C1::f<int>(int t);
...
Рейтинг: 0 / 0
Специализация шаблона. Ступор о_о
    #39256144
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот, только приготовлися ответить,как оказалось что товарисч тс уже усе знает :( дико обломался

чего-то не осталось интересных тем в этом топике :(

кстати, с шаблонами иногда помогает extern, у меня, помню, какие-то шаблоны без этого не компилились (когда я хотел вынести опренделение в cpp файл).
...
Рейтинг: 0 / 0
Специализация шаблона. Ступор о_о
    #39257467
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackну вот, только приготовлися ответить,как оказалось что товарисч тс уже усе знает :( дико обломался

чего-то не осталось интересных тем в этом топике :(


Ну, так получилось :)
Времени не очень много, поэтому интересные темы убиваются на корню по принципу: "сделать, чтоб было просто и чтоб работало". Даже этот проблема была решена изначально отказом использовать нереализованные шаблонные функции класса. Точнее, совсем в начале проблема была в другом, был класс и в нём шаблонная функция GetParam<T>(const String& name), которая выдавала на выходе парам в типе шаблона. Было 3 специализации, а как оказалось, сам шаблон не использовался по коду, и тут вдруг оказалось, что GetParam<String>(...) не работает... в попытке разобраться быстро, выяснилось, что что-то не так, что не помню, но в результате всё свелось к вот этой задаче (а коде быстрое решение было примерно такое: String(GetParam<float>(...)) ...)
такие дела =(

PS: а в 11/14 вроде есть более простой способ получения результата по типу переменной слева
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Специализация шаблона. Ступор о_о
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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