Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5

Шаблоны

24.02.2010, 12:49. Показов 5641. Ответов 28

Студворк — интернет-сервис помощи студентам
Когда разделяю реализацию и прототип шаблонной в функции по разным файлам (*.h и *.cpp) происходит ошибка линковки... Я так понимаю, делать так нельзя?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.02.2010, 12:49
Ответы с готовыми решениями:

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами».
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких...

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис)
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов...

28
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
01.03.2010, 12:52
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Evg:
А тебе интересно?
Мне интересно для самообразования, поскольку Си++ я скорее "не знаю", чем "знаю"
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
01.03.2010, 12:59
fasked:
Эта штука хороша, но не даёт широких возможностей:
Так как такие шаблонные функции будут работать только с типами,
для которых будет явное инстацирование, то есть для типов которые ты пропишишь в явном инстацировании.

Если в такую допустим передать Объект типа MyClass или BClass функция не будет
работать, так как об этом типе ей не известно, тебе предётся его заранее прописать.

Пример явного инстацирования: объявление в файле .h
C++
1
2
3
template double Sort<double>(double *mas ,int size);
template int Sort<int>(int *mas,int size);
template float Sort<float>(float*mas,int size);
0
 Аватар для kazak
3606 / 2746 / 356
Регистрация: 11.03.2009
Сообщений: 6,318
01.03.2010, 13:05
Genius Ignat, а ты случаем не путаешь с перегрузкой функций?)
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
01.03.2010, 13:13
Полноценного кода привести не могу компилятор не поддреживает, старый очень.

Этот способ был описан в книге: В.В.Лаптев С++ Объектно-ориентированное программтрование.
В книге написано в соответствии со стандартом C++ 2003 года.

Добавлено через 7 минут
а ты случаем не путаешь с перегрузкой функций.
Очень похоже.
Может в этом есть другой смысл.
Похоже на перегрузку, и не понятно на кой автор это показывал.
fasked:
А кстати вот и решение нашлось используй перегрузку фнкций.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
01.03.2010, 13:20
Genius Ignat, напомню, что речь шла о том, что хочется пользователю выдать библиотеку, в *.h файлах от которой есть лишь описания шаблонных функций, но нет их реализации (типа код мы не показываем). Явное инстациирование в *.h файле ну ни разу под это определение не попадает. К тому же совершенно непонятно, что делать с тем кодом, который ты привёл. Вариант "такие шаблонные функции будут работать только с типами, для которых будет явное инстацирование" точно так же является недопустимым для пользовательской библиотеки (ибо нафиг нужен пользователю такой шаблон, который работает только для ограниченного набора типов)

Добавлено через 46 секунд
Цитата Сообщение от Genius Ignat Посмотреть сообщение
А кстати вот и решение нашлось используй перегрузку фнкций.
И ручками описывать реализацию каждой функции (для каждого типа)?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
01.03.2010, 13:24  [ТС]
Evg,
Genius Ignat,
Шаблоны

Цитата Сообщение от Evg Посмотреть сообщение
И ручками описывать реализацию каждой функции (для каждого типа)?
В том то и дело, что не хочется так выходить из ситуации, весь смысл шаблонов пропадает
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
01.03.2010, 13:28
Цитата Сообщение от fasked Посмотреть сообщение
Еще один вопрос по шаблонам.
При перегрузка оператора <<
C++
1
friend std::ostream &operator << (std::ostream &out, BaseMatrix<T> &m);
Возникает ошибка ''undefined reference''

Исправляю прототип на следующий
C++
1
friend std::ostream &operator << (std::ostream &out, BaseMatrix<int> &m);
И ошибка соответственно пропадает, то есть как я понимаю необходимо для каждого типа описать собственную функцию? Шаблоны плохо работают с потоками?
Я "не знаю" Си++, нету практики работы с шаблонами, слабо себе представляю, как всё это дело выглядит в описании. Но тем не менее, попробую ответить. Но не могу датьгарантии правильности ответа. Когда ты переопределяешь свой оператор "<<", то ты фактически реализуешь (инстациируешь) функцию (оператор) для КОНКРЕТНОГО типа. "BaseMatrix<int>" является конкретным типом. "BaseMatrix<T>" конкретным типом не является
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
01.03.2010, 14:58
fasked:
Ни кто лучше автора языка тебе не ответит:
Миниатюры
Шаблоны  
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
01.03.2010, 16:48
Цитата Сообщение от fasked Посмотреть сообщение
Еще один вопрос по шаблонам.
При перегрузка оператора <<
C++
1
friend std::ostream &operator << (std::ostream &out, BaseMatrix<T> &m);
Возникает ошибка ''undefined reference''

Исправляю прототип на следующий
C++
1
friend std::ostream &operator << (std::ostream &out, BaseMatrix<int> &m);
И ошибка соответственно пропадает, то есть как я понимаю необходимо для каждого типа описать собственную функцию? Шаблоны плохо работают с потоками?
fasked, Дело в том что оператор вывода должен объявляется другом следующим образом:
C++
1
2
template<class T>
friend std::ostream &operator << (std::ostream &out, BaseMatrix<T> &m);
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
 
template<class T>
class Foo
{
  template<class T> friend std::ostream& operator<<(std::ostream& os, const Foo<T>& foo);
 
public:
  Foo(const T& field)
  : field(field)
  {}
 
private:
  T field;
};
 
template<class T>
std::ostream& operator<<(std::ostream& os, const Foo<T>& foo)
{
  return os << foo.field;
}
 
int main()
{
  Foo<int>    foo1(1);
  Foo<double> foo2(2.0);
 
  std::cout << foo1 << " " << foo2 << std::endl;
 
  return 0;
}
Добавлено через 1 час 22 минуты
Прошу прощения, но приведенный мною пример не совсем верен.
Дело в том, что в таком случае любая спецификация оператора вывода будет дружественной классу Foo.
Исправленная версия:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
template<class T> class Foo;
 
template<class T> std::ostream& operator<<(std::ostream&, const Foo<T>&);
 
template<class T>
class Foo
{
  friend std::ostream& operator<<<T>(std::ostream& os, const Foo<T>& foo);
 
public:
  Foo(const T& field)
  : field(field)
  {}
 
private:
  T field;
};
 
template<class T>
std::ostream& operator<<(std::ostream& os, const Foo<T>& foo)
{
  return os << foo.field;
}
 
int main()
{
  Foo<int> foo1(1);
  Foo<double> foo2(2.0);
 
  std::cout << foo1 << " " << foo2 << std::endl;
 
  return 0;
}
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2010, 16:48

Шаблоны в C++
Доброго времени суток! Начал разбираться что такое шаблон и с чем его едят. Загуглил, вставил код из википедии. Ошибка. ...

шаблоны
помогите с задачей пожалуйста нужно описать шаблон класса для хранения последовательности пар ключ - значение, написать функцию ...

шаблоны в си++
кто может сказать где прблема? List.h #ifndef LIST_H #define LIST_H #include&lt;iostream&gt; #include&lt;ostream&gt; ...

Шаблоны
Здравствуйте не объясните новичку пару аспектов про шаблоны 1)Зачем они нужны 2)Преимущества 3)Синтаксис 4)Маленький примерчик

Шаблоны С++
Есть функция Merge из алгоритма сортировки слиянием, она объединяет два массива A и B, результат записывает в массив C: template&lt;class...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru