Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/37: Рейтинг темы: голосов - 37, средняя оценка - 4.59
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232

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

04.04.2023, 20:22. Показов 21587. Ответов 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
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
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
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
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
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
12.05.2023, 08:37
pgb, вы вроде считаете себя опытным, а вопросы про ошибки ставите как чайник.
В чем выражается ошибка?
Что в консоли?

PS ваша либа без правок не будет компилироваться у всех. _itoa в стандартных плюсах не определена. Почему не std::to_string?
0
фрилансер
 Аватар для Алексей1153
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
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
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
12.05.2023, 09:02
Цитата Сообщение от pgb Посмотреть сообщение
Везде писать std::
да, это намного корректнее. Или локально в функции вкидывать неймспейс. Но никак не в глобалку
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 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
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
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
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
12.05.2023, 09:44
KSergey9, возможно, пытаются порог вхождения снизить. Но скорее - просто стараются не сломать старое, добавляя более удобное новое
А я и std::to_string не стесняюсь пользоваться. И std::stringstream.
А упомянуте две функции - это для случаев, где скорость и память критически важны
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 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
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
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
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru