Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Шаблоны в С++ и если бы их не было

18.11.2022, 14:55. Показов 380. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Подскажите, ну предположим есть самописный шаблонный класс vector - my_vector_class<>.

Шаблоны позволяют удобно указывать тип вектора:

C++
1
2
3
4
//условно
my_vector_class<int>my_vec_int;
my_vector_class<my_struct_1>my_vec_struct_1;
my_vector_class<my_struct_2>my_vec_struct_2;
Я правильно понимаю, что если бы не было шаблонов, то для каждого типа int, my_struct_1, my_struct_2 - приходилось бы создавать копию файла с классом внутри кода которого приписывался бы конкретный тип ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.11.2022, 14:55
Ответы с готовыми решениями:

Вывести позиц Коды символа нажатой клавиши, если не было взаимодействия с мышью, а если было - то не выводить
Вторая: вывести позиц. Коды символа нажатой клавиши, если не было взаимодействия с мышью, а если было - то не выводит. не знаю от слова...

Вывод текста в TPanel с возможностью захвата (как это было бы если бы было в редакторе)
Приветствую. Подскажите , как можно или что надо прочитать что бы вывести текст в любое место будь то Canvas , панель с возможностью...

Зачем в данной программе нужно было использовать шаблоны?
сделан у меня шаблон для двунаправленного списка...причём список формируется по разному в зависимости от типа (инт, дабл и стринг) ...

7
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
18.11.2022, 15:00
да

Добавлено через 3 минуты
Возможно может можно это решить какими-нибудь дефайнами на препроцессоре, но я не знаю как
в порядке бреда
C++
1
2
3
4
5
6
#define USED_TYPE int
#define CLASS_NAME vector_int
#include "my_vector.h"
#define USED_TYPE char
#define CLASS_NAME vector_char
#include "my_vector.h"
Добавлено через 45 секунд
проблема в том, что неизвестно с какими дефайнами потом компилировать my_vector.cpp
1
Заблокирован
18.11.2022, 15:02
Цитата Сообщение от Optimus11 Посмотреть сообщение
Я правильно понимаю, что если бы не было шаблонов, то для каждого типа int, my_struct_1, my_struct_2 - приходилось бы создавать копию файла с классом внутри кода которого приписывался бы конкретный тип ?
Это не единственный вариант.
в Си в полную юзают void*
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
18.11.2022, 15:14  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это не единственный вариант.
в Си в полную юзают void*
Но, как в данном случае указатель на void решает проблему ? Указатель на что именно нужно передать в класс вектора ?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
18.11.2022, 15:19
Цитата Сообщение от SmallEvil Посмотреть сообщение
в Си в полную юзают void*
это если нужно эмулировать полиморфизм
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
18.11.2022, 15:20  [ТС]
Видимо так: предположим тип вектора - это какая то структура.

Получается при объявлении класса вектора нужно указать санчала размер самого типа. То есть объявить саму структуру, и передать его sizeof() в класс.
А при push_back`е - уже передать указатель на эту структуру.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
18.11.2022, 15:23
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
проблема в том, что неизвестно с какими дефайнами потом компилировать my_vector.cpp
в смысле не понятно?
этот паттерн используют в C.
C++
1
2
3
4
5
6
// vector_int.h
#define TYPE int
#define TYPED_NAME(x) x##_int
#include "vector_template.h"
#undef TYPE
#undef TYPED_NAME
C++
1
2
3
4
5
6
// vector_int.cc
#define TYPE int
#define TYPED_NAME(x) x##_int
#include "vector_template.cc"
#undef TYPE
#undef TYPED_NAME
C++
1
2
3
4
5
6
// vector_template.h
class TYPED_NAME(vector) {
  TYPE* data;
  size_t size;
  // etc...
};
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.11.2022, 15:47
Цитата Сообщение от Optimus11 Посмотреть сообщение
Я правильно понимаю, что если бы не было шаблонов, то для каждого типа int, my_struct_1, my_struct_2 - приходилось бы создавать копию файла с классом внутри кода которого приписывался бы конкретный тип ?
примерно так и есть.
только не обязательно создавать множество файлов.
можно все инстансы запихать в один и тот же файл.

собственно, шаблоны просто автоматизируют эту процедуру.
но можно и не использовать шаблоны,
а инстансы под разные типы копипастить в ручную.

Добавлено через 10 минут
Цитата Сообщение от GbaLog- Посмотреть сообщение
этот паттерн используют в C.
если нужно что-то этакое нагенерить,
то лучше не использовать паттерн: "макро-бесие".

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

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

есть такой принцип "хороших практик":
- старайся не использовать макросы там,
где нужно будет отлаживаться.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2022, 15:47
Помогаю со студенческими работами здесь

нахождения функции (было бы хорошо если бы на if)
Составить программу нахождения функции, которая исчисляется в зависимости от значения аргумента. сам пример (не спам и не вирус):...

Прибавьте к количеству 1 если не было нужных чисел
(Напишите программу, в которой необходимо организовать создание словаря (не менее 5-ти записей), согласно своему варианту, произвести...

Если у кого то было такое, подскажите что делать
Привет всем. У меня компьютер с конфигурацией: - Плата Gigabyte Socket-AM3+ GA-990XA-UD3 AMD990X/SB950 4xDDR3-2000 3xPCI-E(16/8+8+4)...

Хранить шаблоны документов в базе и выводить данные в эти шаблоны
Доброго времени суток. Интересует вопрос: мне необходимо формировать вордовские документы по шаблону. У меня создан шаблон документа...

Приложение падает, если было запущено при автозапуске системы
Подскажите я добавил программу в автозагрузку перезагружаю пк она запускается и тут же вырубается А если ее запускать из папки той где...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru