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

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

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

Студворк — интернет-сервис помощи студентам
Приветствую!
Кто хочет поучится программированию на 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++ для двумерного массива

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

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

122
фрилансер
 Аватар для Алексей1153
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,978
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
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,978
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
3011 / 1444 / 262
Регистрация: 16.03.2008
Сообщений: 6,441
Записей в блоге: 2
12.05.2023, 08:37
pgb, вы вроде считаете себя опытным, а вопросы про ошибки ставите как чайник.
В чем выражается ошибка?
Что в консоли?

PS ваша либа без правок не будет компилироваться у всех. _itoa в стандартных плюсах не определена. Почему не std::to_string?
0
фрилансер
 Аватар для Алексей1153
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,978
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
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,978
12.05.2023, 09:02
Цитата Сообщение от pgb Посмотреть сообщение
Везде писать std::
да, это намного корректнее. Или локально в функции вкидывать неймспейс. Но никак не в глобалку
0
3011 / 1444 / 262
Регистрация: 16.03.2008
Сообщений: 6,441
Записей в блоге: 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
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,978
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
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,978
12.05.2023, 09:44
KSergey9, возможно, пытаются порог вхождения снизить. Но скорее - просто стараются не сломать старое, добавляя более удобное новое
А я и std::to_string не стесняюсь пользоваться. И std::stringstream.
А упомянуте две функции - это для случаев, где скорость и память критически важны
0
3011 / 1444 / 262
Регистрация: 16.03.2008
Сообщений: 6,441
Записей в блоге: 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
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,978
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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru