-258 / 20 / 0
Регистрация: 22.09.2015
Сообщений: 1,056
1

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

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

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

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

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

https://github.com/arbnet/CppLibrary
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2023, 20:22
Ответы с готовыми решениями:

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

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

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

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

122
фрилансер
5799 / 5309 / 1092
Регистрация: 11.10.2019
Сообщений: 14,182
09.05.2023, 18:49 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от 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
-258 / 20 / 0
Регистрация: 22.09.2015
Сообщений: 1,056
09.05.2023, 19:03  [ТС] 42
Цитата Сообщение от Алексей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
фрилансер
5799 / 5309 / 1092
Регистрация: 11.10.2019
Сообщений: 14,182
09.05.2023, 19:10 43
pgb, указатель, полученный от литерала, нельзя удалять. Просто замени на новый

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

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

Добавлено через 41 минуту
Проблему решил, двигаюсь дальше.
0
-258 / 20 / 0
Регистрация: 22.09.2015
Сообщений: 1,056
10.05.2023, 20:31  [ТС] 45
Непонятная ошибка. Тестирую класс 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
-258 / 20 / 0
Регистрация: 22.09.2015
Сообщений: 1,056
11.05.2023, 19:09  [ТС] 46
Добрался до ассоциативного массива _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
2631 / 1278 / 249
Регистрация: 16.03.2008
Сообщений: 5,983
Записей в блоге: 2
12.05.2023, 08:37 47
pgb, вы вроде считаете себя опытным, а вопросы про ошибки ставите как чайник.
В чем выражается ошибка?
Что в консоли?

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

К тому же в самой библиотеке на глобальном уровне я using namespace std; не использую только в пространстве имён i интерфейса, пока его не доделал, поэтому в тестовых примерах использую.
0
фрилансер
5799 / 5309 / 1092
Регистрация: 11.10.2019
Сообщений: 14,182
12.05.2023, 09:02 50
Цитата Сообщение от pgb Посмотреть сообщение
Везде писать std::
да, это намного корректнее. Или локально в функции вкидывать неймспейс. Но никак не в глобалку
0
2631 / 1278 / 249
Регистрация: 16.03.2008
Сообщений: 5,983
Записей в блоге: 2
12.05.2023, 09:07 51
Цитата Сообщение от pgb Посмотреть сообщение
В C++ я именно чайник
Тут не важен язык. Это относится к любому ЯП. Возникла ошибка и решил спросить совета у сообщества: опиши ошибку, покажи ее текст. и т.д.

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


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

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

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

Не по теме:

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

0
фрилансер
5799 / 5309 / 1092
Регистрация: 11.10.2019
Сообщений: 14,182
12.05.2023, 09:28 54
Цитата Сообщение от pgb Посмотреть сообщение
_itoa
с 17-го стандарта появилась такие функции в заголовке <charconv>
std::from_chars
std::to_chars

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

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

Не по теме:

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

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



Добавлено через 1 минуту
Цитата Сообщение от pgb Посмотреть сообщение
Ссылочку где написано, плиз. Или не трепите языком..
Цитата Сообщение от voral Посмотреть сообщение
Почему не std::to_string?
Не грубите незнакомым людям, разное случается.
0
фрилансер
5799 / 5309 / 1092
Регистрация: 11.10.2019
Сообщений: 14,182
12.05.2023, 09:44 57
KSergey9, возможно, пытаются порог вхождения снизить. Но скорее - просто стараются не сломать старое, добавляя более удобное новое
А я и std::to_string не стесняюсь пользоваться. И std::stringstream.
А упомянуте две функции - это для случаев, где скорость и память критически важны
0
2631 / 1278 / 249
Регистрация: 16.03.2008
Сообщений: 5,983
Записей в блоге: 2
12.05.2023, 10:06 58
Цитата Сообщение от pgb Посмотреть сообщение
При выводе cout в friend пишу std:: так что не надо мне тут втирать что это необходимость.
вы спросили - я ответил. В чем проблема?

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

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

Цитата Сообщение от pgb Посмотреть сообщение
Непонятная ошибка, пока не могу разобраться.
Как в таком контексте можно было понять эту фразу? Ну, а либу ясновидения я забыл подключить (подозреваю как и многие здесь)
0
542 / 447 / 95
Регистрация: 05.08.2022
Сообщений: 2,437
12.05.2023, 10:30 59
Цитата Сообщение от Алексей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
фрилансер
5799 / 5309 / 1092
Регистрация: 11.10.2019
Сообщений: 14,182
12.05.2023, 11:00 60
Цитата Сообщение от KSergey9 Посмотреть сообщение
когда наконец-то в контейнеры подвезли contains()
а я могу понять - они занимались тем, что сложнее добавить, а на такие "мелочи" временно не обращали внимания Сам так часто поступаю
0
12.05.2023, 11:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2023, 11:00
Помогаю со студенческими работами здесь

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

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

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

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

Как создать свою библиотеку функций?
Выдает ошибку, не могу понять делаю ли всё правильно

Как подключить свою библиотеку, написанную на ассемблере?
Здравствуйте! Новичок я в с++, подскажите пожалуйста что нужна написать чтобы подключить свою...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru