Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232

Пишу свою библиотеку C++

04.04.2023, 20:22. Показов 10308. Ответов 123
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую!
Кто хочет поучится программированию на C++ за одно написать нужные классы и функции для будущих своих разработок, предлагаю присоединиться к разработке своей библиотеки C++.

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

В перспективе я планирую написать с помощью своей библиотеки базу данных, язык программирования, веб-сервер. Ещё есть мысль с применением графической библиотеки wxWidgets(возможно другой) написать заголовочный файл для быстрого создания окон, элементов окна и др.

https://github.com/arbnet/CppLibrary
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2023, 20:22
Ответы с готовыми решениями:

Создать свою библиотеку в С++
Разработать библиотеку в C++ для двумерного массива

Создать свою библиотеку
Создать свою библиотеку в с++,двумерный массив ,что бы выполнялось условие сортировки и поиска элемента в этом двумерном массиве

Разработать свою библиотеку
Разработать библиотеку для работы со структурой данных, для работы с двумерным массивом

123
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,057
09.05.2023, 18:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от pgb Посмотреть сообщение
Как правильно удалить const char*?
если оператор new используется с [] , то оператор delete тоже должен быть с ними

Добавлено через 1 минуту
то есть

C++
1
2
const char* c=new char;
delete c;
и
C++
1
2
const char* c=new char[10];
delete [] c;
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
09.05.2023, 19:03  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
если оператор new используется с [] , то оператор delete тоже должен быть с ними
Я об этом знаю. У меня там всё запутанно... Я делаю класс ANY для разных типов. Класс ANY наследуется от LINK. В линке хранится указатель, размер переменной\объекта, и id c типом(строковое представление) которые я назначил через макрос ID_TYPE.
Хочу сделать так чтобы в ANY можно было присвоить "константную строку". Присвоение работает. Но когда я присваиваю другое значение, то указатель на прежнее значение должно удалится, но возникает ошибка. Перепробовал уже по всякому.
В методе Clear() switch -> case 14:
C++
1
2
3
4
delete static_cast<LETTER*>(pnt);
delete[] (LETTER*)pnt;
delete[] (CHARS*)pnt;
и др.
где
C++
1
2
typedef char LETTER;// Буква
typedef const char* CHARS;// Указатель на массив символов
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,057
09.05.2023, 19:10
pgb, указатель, полученный от литерала, нельзя удалять. Просто замени на новый

Добавлено через 1 минуту
Цитата Сообщение от pgb Посмотреть сообщение
typedef const char* CHARS;
Цитата Сообщение от pgb Посмотреть сообщение
delete[] (CHARS*)pnt;
в итоге - каст к указателю на указатель. Это точно так задумывалось?
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
09.05.2023, 20:15  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
указатель, полученный от литерала, нельзя удалять. Просто замени на новый
Если бы это было так просто. Но у меня же не просто в main это выполняется.. А когда происходит присвоение к объекту ANY
C++
1
2
ANY an;
an="проверка";
В операторе присвоения я создаю новый указатель на массив символов, который нужно потом удалить.
Если делаю ссылкой
C++
1
ANY& operator=(CHARS &chs)
То этот оператор не срабатывает, вызывается другой для простых типов

Добавлено через 1 минуту
Цитата Сообщение от Алексей1153 Посмотреть сообщение
в итоге - каст к указателю на указатель. Это точно так задумывалось?
Хотелось бы, но так не работает. т.к. в операторе создаётся временный объект и если я запоминаю на него ссылку, то потом там строки уже нет

Добавлено через 41 минуту
Проблему решил, двигаюсь дальше.
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
10.05.2023, 20:31  [ТС]
Непонятная ошибка. Тестирую класс ANY в котором добавлен operator++. Объекту ANY присваиваем значение объекта DATETIME, затем увеличиваем через ++. Возникает ошибка удаления ссылки на объект DATETIME в деструкторе.
Я так понимаю создаётся несколько объектов, один удаляется нормально, а второй уже удалить не может. Пока не могу отловить конкретную причину.

Тестовый код
C++
1
2
3
4
5
6
7
8
9
10
11
using namespace std;
#include "_interface.hpp"
 
int main(){
  DATETIME ww;
  ww.Now();
  ANY an(ww);
  cout<<an<<' '<<an.Type()<<' '<<an.Size()<<endl;
  an++;
  cout<<an<<' '<<an.Type()<<' '<<an.Size()<<endl;
}
Добавлено через 5 часов 56 минут
С инкрементом DATETIME разобрался. Сделал ещё описание типов.
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
11.05.2023, 19:09  [ТС]
Добрался до ассоциативного массива _array.hpp Associative
Тест
C++
1
2
3
4
5
6
7
8
9
10
using namespace std;
#include "_error.hpp"
#include "_interface.hpp"
#include "_array.hpp"
 
int main(){
  Associative as;
  as["aa"]=77;
  cout<<as["aa"];
}
Непонятная ошибка, пока не могу разобраться.
0
3012 / 1450 / 262
Регистрация: 16.03.2008
Сообщений: 6,466
Записей в блоге: 2
12.05.2023, 08:37
pgb, вы вроде считаете себя опытным, а вопросы про ошибки ставите как чайник.
В чем выражается ошибка?
Что в консоли?

PS ваша либа без правок не будет компилироваться у всех. _itoa в стандартных плюсах не определена. Почему не std::to_string?
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,057
12.05.2023, 08:41
Цитата Сообщение от pgb Посмотреть сообщение
using namespace std;
и от этого нужно уже избавиться наконец
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
12.05.2023, 09:00  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
вы вроде считаете себя опытным, а вопросы про ошибки ставите как чайник.
В C++ я именно чайник. В прошлом году за пару месяцев написал несколько файлов для библиотеки. Сейчас вот практически полностью всё переделал, человек с форума тут хотел со мной заниматься, я стал вспоминать объяснять ему что и как для чего делаю и тд. Холодно как-то отнёсся не выходил на связь, я его удалил из контактов и продолжил один. Доделаю массивы, перейду на доработку фреймворка, контрольной панели, потом постепенно буду дописывать библиотеку, работу с файлами, сетью и тд.
Цитата Сообщение от voral Посмотреть сообщение
ваша либа без правок не будет компилироваться у всех. _itoa в стандартных плюсах не определена. Почему не std::to_string?
Потому что я уже намучился с использованием стандартных\готовых решений на Pascal(Lazarus), бывают моменты когда нужно что-то поменять, но ты не можешь в готовых решениях ничего изменить и сделать так как нужно, заходишь в тупик и дальше уже не сдвинешься. Так я забросил несколько проектов из-за работы с сетью, криптошифрования и др. Поэтому сейчас стараюсь делать всё исключительно нативно без готовых решений. Стандартный String мне не подходит для реализации будущих проектов.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
и от этого нужно уже избавиться наконец
Везде писать std:: или как прикажете избавится-то?

К тому же в самой библиотеке на глобальном уровне я using namespace std; не использую только в пространстве имён i интерфейса, пока его не доделал, поэтому в тестовых примерах использую.
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,057
12.05.2023, 09:02
Цитата Сообщение от pgb Посмотреть сообщение
Везде писать std::
да, это намного корректнее. Или локально в функции вкидывать неймспейс. Но никак не в глобалку
0
3012 / 1450 / 262
Регистрация: 16.03.2008
Сообщений: 6,466
Записей в блоге: 2
12.05.2023, 09:07
Цитата Сообщение от pgb Посмотреть сообщение
В C++ я именно чайник
Тут не важен язык. Это относится к любому ЯП. Возникла ошибка и решил спросить совета у сообщества: опиши ошибку, покажи ее текст. и т.д.

Цитата Сообщение от pgb Посмотреть сообщение
Потому что я уже намучился с использованием стандартных\готовых решений,
И по этому вы взяли не стандартное? Смешно же. Тогда вообще не пользуйтесь этим ЯП. Просто на пустом месте вы теряете кроссплатформенность. Т.е. если "нативно" то как раз _itoa - нарушает это ваше правило.


Цитата Сообщение от pgb Посмотреть сообщение
Везде писать std:: или как прикажете избавится-то?
Внезапно, но да... На больших проектах спасает от проблем. Можно писать всегда std:: не так уж и "длинно". Либо, если очень хочется, объявлять в рамках одной функции.
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
12.05.2023, 09:18  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
_itoa - нарушает это ваше правило
Если знаете как нативно реализовать эту функцию с радостью заменю. Я вот на данный момент не знаю как это сделать, поэтому и использую, и не только _itoa некоторые другие тоже использую, но по большому счёту всё стараюсь писать нативно.

Добавлено через 4 минуты
Цитата Сообщение от voral Посмотреть сообщение
Внезапно, но да... На больших проектах спасает от проблем. Можно писать всегда std:: не так уж и "длинно". Либо, если очень хочется, объявлять в рамках одной функции.
Я уже выше сказал, что глобально в самой библиотеке не использую, только в тестовых примерах. При выводе cout в friend пишу std:: так что не надо мне тут втирать что это необходимость..
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
12.05.2023, 09:25
_itoa - нарушает это ваше правило
Цитата Сообщение от pgb Посмотреть сообщение
Если знаете как нативно реализовать эту функцию с радостью заменю.
Уже написано же.

Добавлено через 58 секунд

Не по теме:

Цитата Сообщение от pgb Посмотреть сообщение
человек с форума тут хотел со мной заниматься
Чудной чел. Либо не читает форум, либо сверх меры самонадеян.

0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,057
12.05.2023, 09:28
Цитата Сообщение от pgb Посмотреть сообщение
_itoa
с 17-го стандарта появилась такие функции в заголовке <charconv>
std::from_chars
std::to_chars

не очень удобные, как по мне, но заявлены очень быстрыми
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
12.05.2023, 09:34  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
Это относится к любому ЯП. Возникла ошибка и решил спросить совета у сообщества: опиши ошибку, покажи ее текст. и т.д.
Как таковой ошибки нет, всё компилируется и работает. Дело в некоторой недоработке, где-то что-то опущу, что-то не предусмотрю и тд. Всё тестирую и бывают казусы, что должно работать так, не работает как надо, и это нужно смотреть в дебагере и тд. Если вы не разрабатывали ничего серьёзного то вам этого не понять просто..

Добавлено через 4 минуты
Цитата Сообщение от KSergey9 Посмотреть сообщение
Уже написано же.
Ссылочку где написано, плиз. Или не трепите язычком..
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
12.05.2023, 09:36

Не по теме:

Цитата Сообщение от Алексей1153 Посмотреть сообщение
с 17-го стандарта появилась такие функции в заголовке <charconv>
std::from_chars
std::to_chars
На мой взгляд это вообще смешно, что в языке не было стандартных функций для операций, которые постоянно всем нужны. Велосипедов нагорожено разной степени проблемности - неимоверное количество.

Вообще С++ на мой взгляд последние несколько лет внезапно развивается в очень здравом направлении; если ограничивать себя в подмножестве используемых конструкций - то практически бейсик (в хорошем смысле) получится, только быстрый. (бейсик это так, по старой памяти; что там сейчас бизнес-программист фрейндли?).



Добавлено через 1 минуту
Цитата Сообщение от pgb Посмотреть сообщение
Ссылочку где написано, плиз. Или не трепите языком..
Цитата Сообщение от voral Посмотреть сообщение
Почему не std::to_string?
Не грубите незнакомым людям, разное случается.
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,057
12.05.2023, 09:44
KSergey9, возможно, пытаются порог вхождения снизить. Но скорее - просто стараются не сломать старое, добавляя более удобное новое
А я и std::to_string не стесняюсь пользоваться. И std::stringstream.
А упомянуте две функции - это для случаев, где скорость и память критически важны
0
3012 / 1450 / 262
Регистрация: 16.03.2008
Сообщений: 6,466
Записей в блоге: 2
12.05.2023, 10:06
Цитата Сообщение от pgb Посмотреть сообщение
При выводе cout в friend пишу std:: так что не надо мне тут втирать что это необходимость.
вы спросили - я ответил. В чем проблема?

Добавлено через 15 минут
Цитата Сообщение от pgb Посмотреть сообщение
Как таковой ошибки нет, всё компилируется и работает. Дело в некоторой недоработке, где-то что-то опущу, что-то не предусмотрю и тд. Всё тестирую и бывают казусы, что должно работать так, не работает как надо, и это нужно смотреть в дебагере и тд. Если вы не разрабатывали ничего серьёзного то вам этого не понять просто..
И вновь вы на рельсы эти дебильные "вам не понять...."

Вы пишите не в болге, где рассчитано на то что автор просто делится своими переживаниями, а на форуме, где автор обычно ищет помощь в решении своей проблемы.

Цитата Сообщение от pgb Посмотреть сообщение
Непонятная ошибка, пока не могу разобраться.
Как в таком контексте можно было понять эту фразу? Ну, а либу ясновидения я забыл подключить (подозреваю как и многие здесь)
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
12.05.2023, 10:30
Цитата Сообщение от Алексей1153 Посмотреть сообщение
KSergey9, возможно, пытаются порог вхождения снизить.
Я бы другую формулировку применил вместо этой уничижительной "порог вхождения".
Банально хотят сделать язык приспособленным к существенно большему кругу задач.
Гонять байтики изначально было очень клёво на Си (и плюсах). Но когда ты пытаешься использовать в клиентских бизнес-задачах, то внезапно выясняется, что библиотека неимоверно скудна на повседневно нужные там операции. Хуже того, ты ты всё равно вынужден постоянно очень внимательно следить за байтиками, хотя задача вообще про друое.

По-началу стали втаскивать функциональщину, красноглазики писали кипятком.
Но, по счастью, в комитете, очевидно, появились люди, которые быстро смекнули, что красноглазики они прикольные конечно, но только в своей незаметно узкой прослойке и, главное, это история вообще не про деньги.
И тогда в 14 и 17 стандарты стали подвозить много именно бизнес-фич, и к 20 это только набирает обороты, что меня очень радует.
Разумеется, для красноглазиков тоже очень много чего подвозят, без них в общем-то тоже никак нам не жить на самом деле, симбиоз это хорошо.

PS
Особенно меня умиляет история длинною в несколько десятилетий(!!), когда наконец-то в контейнеры подвезли contains()
И длина этой истории - это очень яркий признак засилия красноглазиков. Я лично не раз с такими общался лично на протяжении буквально не одного десятилетия (ну ок, двух), которые совершенно искренне не могли понять в чем проблема вот такого кода, которого было весьма существенное количество
C++
1
2
3
std::set<int>::const_iterator it = myset.find(key);
if (it != myset.cend())
....
и зачем требуется что-то вроде contains(), когда "средства в языке тебе дали, это конструктор, из него и собирай что хочешь! в этом суть". Вот дословно. Поразительные люди! мне их не понять, видимо, никогда.
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,057
12.05.2023, 11:00
Цитата Сообщение от KSergey9 Посмотреть сообщение
когда наконец-то в контейнеры подвезли contains()
а я могу понять - они занимались тем, что сложнее добавить, а на такие "мелочи" временно не обращали внимания Сам так часто поступаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2023, 11:00
Помогаю со студенческими работами здесь

Как создать свою библиотеку?
Как создать свою библиотеку со своими функциями и включить ее в основную программу?

Как создать свою библиотеку
Есть несколько понятий в которых путаюсь. библиотека - какой-то файл заголовочный файл - файл с объявлениями (описаниями) как...

Как правильно подключить свою библиотеку?
Здравствуйте всем. Я использую Visual Studio. В одном решении у меня находится проект библиотеки SEAL и проект SEALStart, из которого я...

Как написать свою библиотеку функций?
Я только начинаю изучать программирование на С++, параллельно разбираюсь с ООП. Вообще идеи ООП понятны и нравятся мне. Удобно разложить...

Как добавить свою библиотеку в стандартные С++
Доброго времени суток, уважаемые форумчане! Недавно стало интересно, можно ли добавить свою библиотеку к стандартным библиотекам с++. ...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru