-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
1

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

04.04.2023, 20:22. Показов 7294. Ответов 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
zayats80888
07.04.2023, 16:44     Пишу свою библиотеку C++
  #21

Не по теме:

Цитата Сообщение от Reglage Посмотреть сообщение
неочевидными плюсами
Он там ссылку на "исходники" дал, если приглядитесь, то все заявленные плюсы сразу отвалятся и всплывут огромные минусы, UB том числе.

0
2704 / 1297 / 253
Регистрация: 16.03.2008
Сообщений: 6,028
Записей в блоге: 2
07.04.2023, 17:30 22
Цитата Сообщение от pgb Посмотреть сообщение
Многие видели, кому-то понравилось,
они его использовали в своих проектах? Или это были далекие от Ит люди?

Цитата Сообщение от pgb Посмотреть сообщение
кописастеры такие как voral, которые по инструкции всё делают не понимают
вы уже сделали на нем хоть один сайт?


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

Короче вы бросили один велосипед не доведя до релиза - решили другой?

Цитата Сообщение от pgb Посмотреть сообщение
но то что я разработал свой фреймворк это факт
1. Где можно посмотреть реализованные на нем проекты?
2. На нем уже можно попробовать, что то сделать?
3. Вы хотя бы можете сами продемонстриовать создание не сложного сайта, но так, чтобы не убить опять три часа на просмотр того как вы боритесь с переменным успехом с ошибками?

Я думаю нет.

PS К слову, я на C++ так же писал реальные проекты - могу и здесь вас что ли "макнуть". Зная ваш стиль я практически уверен, что здесь так же много всякого бреда.

Добавлено через 2 минуты
Цитата Сообщение от pgb Посмотреть сообщение
Qt это программная среда разработки с своим IDE редактором и др
Блин вот и первый бред. Qt это фреймворк в первую очередь (Даже на Symbian компилил десктопные программы ). И очень даже классный. Qt Creator - это IDE (мне она, кстати очень нравилась, у меня есть лицензионные MS студия, но я прям с удовольствием перешел на креатор). Использовать Qt Creator не обязательно

Добавлено через 4 минуты
Цитата Сообщение от pgb Посмотреть сообщение
Изюминка в том, чтобы подготовить все необходимые классы и функции для создания своих будущих проектов
Какие все и для каких проектов?

Что вам не хватает в MFC?
И что там кажется лишним? (а если это лишнее убрать, то значит уже не для любых проектов)
Чего вам не хватает в Qt?
И что в Qt кажется лишним? (а если это лишнее убрать, то значит уже не для любых проектов)

К слову, Qt в версии 5 заметно подразбили библиотеки, и они стали меньше.. Т.е. пожалуйста: вы можете спокойно подключать именно те, что необходимы на конкретном проекте.

Добавлено через 1 минуту
Цитата Сообщение от pgb Посмотреть сообщение
Это C++, который может компилироваться под любые CPU/OS
Для кроссплатформенности достаточно использовать C++?

Добавлено через 1 минуту
Цитата Сообщение от pgb Посмотреть сообщение
Qt это программная среда разработки с своим IDE редактором и др.
Я же просто хочу написать небольшие заголовочные файлы с самыми необходимыми классами и функциями
Как и в нише веб разработки совет прежний: прежде чем говорить, внимательно знакомьтесь с инструментами которым даете оценку. (хотя бы документацию) иначе вы палитесь в качестве дилетанта

Добавлено через 2 минуты
Цитата Сообщение от pgb Посмотреть сообщение
то захочет может присоединиться, объясню как что работает и где можно использовать, так же возможна и совместная разработка.
Как прошедший это, говорю всем запасайтесь чаем и попкорном... Придется долго самотреть как ТС борется с ошибками уровня джун-----

Добавлено через 13 минут
Цитата Сообщение от pgb Посмотреть сообщение
https://github.com/arbnet/CppLibrary
Это пипец, такое уг, даже ревьюкода нет смысла проводить.
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
07.04.2023, 17:42 23
например, резко появились такие вопросы:
1) типы данных то зачем определять, они ведь уже встроены )
2) И для этого уже изобрели using
3) на фоне стандартных и оптимизированных-переоптимизированных-отлаженных std::array и std::vector вызывает недоумение своя наивная реализация вектора template <typename dTYPE> class Array . Которая не содержит работу с перемещением и даже простого swap на крайняк. Нет emplacement new
4) безопасность относительно исключений - нету

в общем, сыровато

Добавлено через 3 минуты
если это - "свой новый язык", то он пока что намного хуже, чем C++ . И не может быть эффективнее, чем C++, просто потому, что он на нём и написан. Тогда уж какой-нибудь C или даже ассемблер в руки - и вперёд
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
07.04.2023, 21:00  [ТС] 24
Цитата Сообщение от Алексей1153 Посмотреть сообщение
1) типы данных то зачем определять, они ведь уже встроены
Для удобства, я везде стандартизирую типы, и создаю механизм для просмотра значений и др. при отладке.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
2) И для этого уже изобрели using
Вообще-то для определений типов используют typedef, а using это просто алиас\псевдоним
Цитата Сообщение от Алексей1153 Посмотреть сообщение
3) на фоне стандартных и оптимизированных-переоптимизированных-отлаженных std::array и std::vector вызывает недоумение своя наивная реализация вектора template <typename dTYPE> class Array . Которая не содержит работу с перемещением и даже простого swap на крайняк. Нет emplacement new
У меня задача как можно проще и быстрее сделать механизм работы с переменными. Вспомогательные функции будут добавляться по мере необходимости.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
4) безопасность относительно исключений - нету
Во-первых на стадии компиляции все ошибки по не соответствию типов отлавливаются. Во-вторых чем проще функционал типа тем лучше, проще работать с данными.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
если это - "свой новый язык", то он пока что намного хуже, чем C++ . И не может быть эффективнее, чем C++, просто потому, что он на нём и написан. Тогда уж какой-нибудь C или даже ассемблер в руки - и вперёд
Я не собираюсь писать замену C++ я лишь хочу написать интерпретатор по типу PHP, но более гибкий.
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
07.04.2023, 21:08 25
Цитата Сообщение от pgb Посмотреть сообщение
Вообще-то для определений типов используют typedef, а using это просто алиас\псевдоним
они работают одинаково, и там алиас, и тут алиас.
There is no difference between a type alias declaration and typedef declaration
но using имеет более читаемый и вменяемый синтаксис. typedef оставлен для обратной совместимости
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
29.04.2023, 11:12  [ТС] 26
Немного обновил.
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
29.04.2023, 16:48 27
pgb,

эти методы можнонужно сделать const noexcept
LOGIC operator==(const STRING &obj){
return this->Compare(obj.mdt->str,obj.mdt->sz);
}
LOGIC operator!=(const STRING &obj){
return !this->Compare(obj.mdt->str,obj.mdt->sz);
}
INT_W Size(){return mdt->sz;}
INT_W Total(){return mdt->tl;}
неплохо бы применить правило пяти для класса.
1
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
29.04.2023, 17:01  [ТС] 28
Цитата Сообщение от Алексей1153 Посмотреть сообщение
эти методы можнонужно сделать const noexcept
А что это даст? Извиняюсь за глупый вопрос, но я только учусь. Что noexcept делает?
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
29.04.2023, 17:22 29
pgb, const позволит вызывать метод для константных объектов. А noexcept - так можно пометить методы/функции, которые гарантированно не кидают исключения. Их компилятор сможет более эффективно оптимизировать
1
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
29.04.2023, 19:08  [ТС] 30
Цитата Сообщение от Алексей1153 Посмотреть сообщение
А noexcept - так можно пометить методы/функции, которые гарантированно не кидают исключения. Их компилятор сможет более эффективно оптимизировать
Понятно. Спасибо.

Добавлено через 1 час 24 минуты
Тестирую класс Args(в файле _array.h) - это класс для передачи аргументов разных типов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "_zests.h"
#include "_array.h"
using namespace std;
 
int main(){
  z::r();// включаем кирилицу
  
  Args ar(17,55,"ddd",0.5,"VVVV");// создаём объект аргументов с параметрами
  cout<<ar;// смотрим что у нас в аргументах
  cout<<ar.Take(2)<<endl;// берём 2 элемент
  cout<<ar;// опять смотрим что у нас в аргументах
 
  z::p();// включаем ожидание\паузу
}
Ошибка при взятии Take параметра. В чём проблема кто подскажет?
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
29.04.2023, 21:00 31
Цитата Сообщение от pgb Посмотреть сообщение
Ошибка
какая именно ошибка ? Её текст или скрин ?

Добавлено через 47 секунд
так отладчиком зайди туда, чтобы найти место ошибки

Добавлено через 2 минуты
вызывает подозрение этот момент

dTYPE Take(INT_L index=-1){
dTYPE val;
if(mdt->sz){
t::Index(index,mdt->sz);
val=mdt->vars[index];mdt->sz--;
while(index<mdt->sz){
mdt->vars[index]=mdt->vars[index+1];index++;
}
}else val=0;
return val;
}
если sz - это размер массива vars, то тут выход за край

Добавлено через 2 минуты
также, если индекс отрицательный, тоже будет выход за край

(тип индекса должен быть size_t - он беззнаковый)
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
29.04.2023, 21:13  [ТС] 32
Алексей1153, В том месте где вы показали всё нормально. Проблема в классе Args, решил его переписать. Раньше сделал внутренний массив указателей на значения через указатель, потом в конструкторе копирования просто устанавливал указатель. Но сейчас думаю проще сделать обычным объектом. Хотя может и не в этом дело, не понравилось мне что-то это сейчас.

В методе Take класса Args, я получаю указатель на элемент, потом читаю значение в новый объект который потом возвращаю из метода. А по указателю удаляю объект\значение вот тут что-то не правильно работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Args {
...
ANY Take(INT_L index=0){
        ANY res;
        if(apr->Size()){
            //ANY *any=(ANY*)apr->Take(index);
            //res=*any;delete any;
            POINTER pnt=apr->Take(index);
            res=*(ANY*)pnt;
            delete static_cast<ANY*>(pnt);
        }
        return res;
    }
...
}
Добавлено через 3 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
какая именно ошибка ? Её текст или скрин ?
Ошибку никакую не выдаёт, ни при компиляуции ни при работе, но результат не тот который ожидаем..
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
02.05.2023, 21:45  [ТС] 33
Сделал свой класс(в файле _types.hpp) умного указателя POINTER<CHARS> и наследуя его делаю класс STRING.
При конвертации числа в строку возникает ошибка. Не пойму в чём дело. Исходник на гите обновил.
Тестовый файл
C++
1
2
3
4
5
6
7
8
9
10
11
using namespace std;
#include "_interface.hpp"
 
int main(){
  i::r();
  
  STRING st;
  st=(STRING)445538;
  cout<<st;
  
}
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
02.05.2023, 22:05 34
pgb, я сильно не вникал. Но подозрительное место

STRING(dTYPE val){
POINTER<CHARS> lts;
sprintf(*lts,"%d",val);lts.Size(true);
....
}
так сейчас в lts произошло:
C++
1
POINTER(){pnt=new dTYPE;}
pnt указывает на неинициализированный экземпляр типа dTYPE

а ты его разыменовываешь (?) и при этом ты туда ещё и строку хочешь форматировать

также, где гарантия, что val - это int ? Это к вопросу о форматном символе %d

Я потерял нить логики, если честно

Добавлено через 5 минут
нет, отсутствие инициализации тут ни при чём. Но всё равно сомнительно его там наличие
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
02.05.2023, 23:02  [ТС] 35
Алексей1153, О чём вы говорите там всё нормально работает.

POINTER<CHARS> lts; Создаётся указатель на строку до 32 символов, потом
sprintf(*lts,"%d",val);lts.Size(true); по указателю на строку заполняется число из val. потом подсчёт длинны строки в указателе. Это можно вынесли в main отдельно проверить всё работает нормально.
Код
Cr1=0x2533b10
Cr1=0x2533b50
Cr1=0x2533bb0
DEL=0x2533bb0 4
DEL=0x2533b50 
NULL
Вставил вывод при создании объекта Cr1 это первый конструктор POINTER<CHARS>(INT_W tl=32,INT_W rv=0)
т.е.
создаётся STRING st;
потом ещё новый объект для конвертации st=(STRING)445538;
ещё какой-то видимо для вывода
Удаляется который для конвертации
Потом видимо для присвоения
и потом ещё раз с таким же адресом пытается удалить но его уже нет.

Добавлено через 34 минуты
Разобрался. Завтра доделаю.

Добавлено через 5 минут
Как правильно сделать перегрузку для типов целых чисел и с плавающей точкой?
C++
1
2
3
4
5
6
7
8
9
10
template<typename dTYPE, typename = t::Enable<t::isInteger<dTYPE>,dTYPE>>
    STRING(dTYPE val){
        POINTER<CHARS> lts;
        sprintf(*lts,"%d",val);lts.Size(true);*this=*lts;
    }
template<typename dTYPE, typename = t::Enable<t::isFloating<dTYPE>,dTYPE>>
    STRING(dTYPE val){
        POINTER<CHARS> lts;
        sprintf(*lts,"%f",val);lts.Size(true);*this=*lts;
    }
0
KSergey9
05.05.2023, 11:51
  #36

Не по теме:

Цитата Сообщение от Алексей1153 Посмотреть сообщение
вызывает подозрение этот момент
Цитата Сообщение от pgb Посмотреть сообщение
В том месте где вы показали всё нормально.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
pnt указывает на неинициализированный экземпляр типа dTYPE
Цитата Сообщение от pgb Посмотреть сообщение
Алексей1153, О чём вы говорите там всё нормально работает.
Чисто посмеяться зайти, если погода плохая за окном.

Алексей1153, вы молодец! но бессмысленный в данном случае. Такие персонажи (типажа "непризнанный гений") периодически всплывают на разных форумах. Увы, практика, в том числе моя личная, показывает, что абсолютно бесполезно надеяться быть услышанным. Хочется, но бесполезно.

0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
05.05.2023, 11:56 37
KSergey9, да я давно перестал пытаться переделывать ТС Ясно, что всё это делается намного проще. Я пытаюсь смотреть на текущий код и разгадать очередные грабли. Но долго я не ковыряюсь, говорю только то, что в глаза бросается. В отладчике не запускаю, там бы что-то ещё нашёл
1
voral
05.05.2023, 12:02
  #38

Не по теме:


KSergey9, надо отдать должное, ТС здесь хоть спрашивает по коду, оперирует листингами и код на github есть. В данном случае это уже прогресс. Вот на форуме есть тема про его php "фреймворк" (подчеркиваю: в кавычках). Вот там жести больше. Да и если посмеяться - даже без знаний php там много перлов (про тот же git).

0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
07.05.2023, 19:28  [ТС] 39
voral, мне вот не понятен ваш мотив, я по вашему делаю что-то запрещённое, не нормальное или что? В чём причина постоянных ваших нападок?
Цитата Сообщение от voral Посмотреть сообщение
здесь хоть спрашивает по коду, оперирует листингами и код на github есть
Так и фреймворк первоначально я выкладывал на гит. Да и что толку что я сейчас выложил либу на гит толку всё равно никакого, это было бы полезно если со мной ещё кто-то разрабатывали или подсказывали что и как сделать и тд. В данном случае пока ещё подержу, чисто для себя буду некоторые правки делать. Позже если единомышленников опять не будет, удалю, когда буду приближаться к завершению разработки библиотеки, т.к. в первую очередь делаю для себя, для разработок будущих своих проектов.

Алексей1153, вам большое спасибо за помощь, даёте дельные советы.
KSergey9, вам тоже спасибо, несмотря на ваше саркастичное отношение, наталкивали на некоторые решения.

Добавлено через 4 часа 6 минут
Обновил гит. Добавил класс своего умного указателя. Переделал класс STRING с применением умного указателя, также переделал массивы Array. Сейчас настраиваю Args аргументы. Непонятная ошибка при вызове метода Take(извлечение элемента), скорее всего связанная с деструктором, пока не понял в чём дело.
Буду рад помощи.
C++
1
2
3
4
5
6
7
8
9
10
11
using namespace std;
#include "_interface.hpp"
#include "_array.hpp"
 
int main(){
  Args arg("ddd",77,0.88,"uuu");
  cout<<arg;
  cout<<arg[1]<<' '<<arg[3]<<endl;
  cout<<arg.Take(2)<<endl;// без вызова этого метода всё работает нормально
  cout<<arg;
}
Добавлено через 2 часа 0 минут
Ошибку нашёл, переделываю класс ANY.
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
09.05.2023, 18:34  [ТС] 40
Как правильно удалить const char*?
C++
1
2
3
4
5
6
7
8
9
10
using namespace std;
#include "_interface.hpp"
 
int main(){
  ANY an;
  an="проверка";
  cout<<an<<' '<<an.Type()<<' '<<an.Size();
  an="123";// ошибка возникает при удалении "проверка", перед тем как присвоить новое значение "123"
  cout<<an<<' '<<an.Type()<<' '<<an.Size();
}
Оператор присвоения в классе ANY
C++
1
2
3
4
5
6
7
8
ANY& operator=(CHARS chs){
        Clear();
        INT_W sz=z::Lsize(chs)+1;
        CHARS lts=new LETTER[sz];
        ADDRESS adr1=(ADDRESS)lts,adr2=(ADDRESS)chs;
        z::Copy(adr1,adr2,sz);LINK::Init(lts);
        return *this;
    }
Функция очистки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void Clear(){
        if(pnt){
            switch(idt){
                case 1: delete static_cast<LOGIC*>(pnt);break;
                case 2: delete static_cast<LETTER*>(pnt);break;
                case 3: delete static_cast<RANGE*>(pnt);break;
                case 4: delete static_cast<BYTE*>(pnt);break;
                case 5: delete static_cast<INT_S*>(pnt);break;
                case 6: delete static_cast<INT_W*>(pnt);break;
                case 7: delete static_cast<INT_M*>(pnt);break;
                case 8: delete static_cast<INT_L*>(pnt);break;
                case 9: delete static_cast<INT_T*>(pnt);break;
                case 10:delete static_cast<INT_B*>(pnt);break;
                case 11:delete static_cast<FLOAT*>(pnt);break;
                case 12:delete static_cast<DOUBLE*>(pnt);break;
                case 13:delete static_cast<ADDRESS*>(pnt);break;
                case 14:delete static_cast<LETTER*>(pnt);break;
                case 15:delete static_cast<STRING*>(pnt);break;
                case 16:delete static_cast<DATETIME*>(pnt);break;
                default:delete static_cast<LINK*>(pnt);
            }
            LINK::Clear();
        }
    }
Остальная реализация на гитхабе
0
09.05.2023, 18:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2023, 18:34
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

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

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