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

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

04.04.2023, 20:22. Показов 7292. Ответов 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
59 / 35 / 8
Регистрация: 06.06.2013
Сообщений: 145
12.05.2023, 22:48 81
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от pgb Посмотреть сообщение
С массивами разобрался.
Какие преимущества имеет Array, например, перед std::vector? На самом деле подобного рода задачи - классный способ автору въехать в язык программирования, но судя по содержанию темы, работать с ней мне сейчас будет очень страшно. Тем более "в удобном синтаксисе" функции и методы названы с большой буквы, что вообще, никак, ни разу не удобно.

Не могу сказать, что мои знания в языках программирования глубже, чем у ТС (по крайней мере, своего фреймворка у меня нет), но и на работе меня держат не в качестве программиста - занимаюсь С++ скорее в качестве бонуса к основной профессии. Но когда-то тоже страдал такой фигней - что-то не устроило в <complex>, и я написал свой класс комплексных чисел - кривой, косой, но зато родной, со своим Удобным Синтаксисом. И даже обернул его в dll, шоб пользоваться, не задумываясь. Но задумываться приходилось снова и снова. Недавно откопал его и ужаснулся. И так как жизнь меня ничему не учит, переписал... Ну вот сейчас-то он стопудова лучше, чем стандартный complex! Хотя смотрю реализацию стандартного - а там какие-то хитрые конструкции, макросы, __builtin-функции... нет, мой класс все равно лучший, но рекламировать его всему миру я, пожалуй, пока не буду
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
13.05.2023, 07:34 82
Цитата Сообщение от Anvis Посмотреть сообщение
функции и методы названы с большой буквы, что вообще, никак, ни разу не удобно
это чисто субъективное. Я, например, тоже с большой буквы обычно их называю. Но, в целом, мне без разницы, как они названы, лишь бы имя отражало суть. В Qt, например, всё с мелкой буквы, а часто пропущен префикс "get" Ну, слегка непривычно было, но сейчас пофиг

ТС хочет написать свой велосипед, и напишет, наверное. Только поймёт, что тот же std::vector написан и протестирован намного круче. И рано или поздно всё равно перейдёт на всё стандартное.
В частности, ТС не использует перемещение, placement new, забил на правило пяти. Это из сразу очевидных ошибок. Возможно, ещё куча граблей
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
13.05.2023, 08:23  [ТС] 83
Цитата Сообщение от voral Посмотреть сообщение
можете присмотреться к библиотеке boost
Спасибо, но нет по мне голимая реализация. Поймите я не утверждаю, что это полный отстой, многие же пользуются и тд. просто я уже глядел реализацию как там что сделано и по мне это лучше не использовать в своих разработках, вот и всё, если вас это устраивает я не против, пользуйтесь.

Мне нужны не готовые решения, а некоторый удобный функционал работы с дисковой системой, вот как работа с файлами https://en.cppreference.com/w/cpp/filesystem На основе чего я уже смогу сделать то как мне надо.
Цитата Сообщение от Anvis Посмотреть сообщение
Какие преимущества имеет Array, например, перед std::vector? На самом деле подобного рода задачи - классный способ автору въехать в язык программирования, но судя по содержанию темы, работать с ней мне сейчас будет очень страшно. Тем более "в удобном синтаксисе" функции и методы названы с большой буквы, что вообще, никак, ни разу не удобно.
Для меня преимущества очевидны, это простая реализация, в случае чего можно подправить, удобство работы, отладки, на основе чего можно создавать новые классы которые наследуют удобный функционал и тд.

Проблема большинства в том что они хотят чтобы им всё выложили на блюдечке, чтобы всё как им хочется, но это их проблема, окружающим наплевать на то что кто чего хочет, у них свои хотелки и каждый старается перетаскивать одеяло в свою сторону.
Например некоторые постоянно стараются меня заставить делать так как им было бы удобно и тд. вот только это напрасно я делаю и буду делать только так как мне удобно. У меня с годами выработались привычки, хорошие ли плохие, но я так привык. Например почему я сделал типизацию заглавными буквами, методы с большой буквы, везде у меня одни и те же имена переменных или отличающиеся одной буквой и тд. Это выработанные годами привычки. Когда то я писал базу данных на Pascal и определил типизацию таким образом, затем применил это в PHP классе работы с базой данных, ещё где-то и тд. теперь вот и в C++ сделал так же. Мне это удобно на любом языке у меня один свой стиль программирования не надо перестраиваться, вспоминать что и как надо делать в том или ином языке. Свой удобный синтаксис выработался, я быстро разбираюсь в своём коде нахожу недочёты и дорабатываю если перехожу с одного языка на другой и тд. И не надо меня заставлять делать как вам удобно.
Ещё в детстве я уяснил одну простую истину, если чего-то хочешь, то сделай то что позволит тебе это получить. Я жил без отца да и мама со мной ничем не занималась, ничему не учила, кроме как на огородах, усадах пахать, дома убираться. До всего остального приходилось доходить своим умом... Я ещё в детстве сам мог починить газовую колонку, телевизор (ламповый, там просто было сразу видно где что сгорело, в современных я уже не разбираюсь, специального образования нет), замки в двери вставлял, мопед перебирал, потом и машины тоже(после армии сразу купил первую машину) и тд.
Хотите чтобы типизация была так как вам удобно, методы были с маленькой буквы и тд. делайте форк или пишите свою библиотеку и тд. Делайте так как вам нужно, никто кроме вас этого делать не будет. Не хотите делать, тогда подстраивайтесь под то что есть и смиритесь с тем что не получите то как хотите. Вот и всё.

ЗЫ. Я свою библиотеку пишу исключительно для своих целей, которые не раз озвучивал.
0
2702 / 1295 / 253
Регистрация: 16.03.2008
Сообщений: 6,028
Записей в блоге: 2
13.05.2023, 08:48 84
Цитата Сообщение от pgb Посмотреть сообщение
по мне голимая реализация
И после таких заявлений (особенно если учесть, что вы сами говорите, что в плюсах вы новичок) вы спрашиваетесь почему я до вас докапываюсь.

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

Но это так к слову - хотите делать свое пилите. Я это не для спора, а для того, чтоб проинформировать вас о том, что уровень разработчиков там высокий и опыта у них навалом
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
13.05.2023, 12:57  [ТС] 85
Цитата Сообщение от voral Посмотреть сообщение
чтоб проинформировать вас о том, что уровень разработчиков там высокий и опыта у них навалом
Я же сказал, не имею ничего против, если вас устраивает эта библиотека пользуйтесь.
Насчёт опыта. Одну и туже функцию можно реализовать тысячами способами и все будут работать и выдавать нужный результат. Вот только одна функция может быть написана чисто без использования других, другая с использованием, третья и так и так, четвёртая с вставкой ассемблера, и тд. Я хоть и чайник в C++ но у меня достаточно компетенции чтобы понять, что та или иная функция будет быстрой, легко используемой, не потянет ничего лишнего и тд. Глядя на то как там реализовано это трешь, не смотря на опытность тех кто это писал.. Вот поэтому современные компы нет, нет да подвисают несмотря на гигабайты оперативной памяти, кучи ядер процессора и тд.

Добавлено через 3 часа 44 минуты
Кстати вот тут на форуме видел тему насчёт кодировки. Перерыл можно сказать весь инет когда-то, но так и не нашёл рабочего примера конвертации кодировки, с iconv не компилируются примеры, куча ошибок, даже разбираться в этом шлаке, в чём дело нет желания.

Может кто дать пример конвертации кодировки из UTF-8 в ANSI 1251? А в идеале бы универсальную из разных кодировок с нужную.
0
2702 / 1295 / 253
Регистрация: 16.03.2008
Сообщений: 6,028
Записей в блоге: 2
13.05.2023, 13:23 86
Есть iconv_open . а если хотите результата то показывайте минимально необходимый для воспроизведения код и ошибки которые получаете. Какой смысл подсказывать вам решение, все равно же вы будете вы его в свой код вставлять. Будут ошибки - будете следующий пример искать?
0
59 / 35 / 8
Регистрация: 06.06.2013
Сообщений: 145
13.05.2023, 19:04 87
Цитата Сообщение от pgb Посмотреть сообщение
Для меня преимущества очевидны
Так я потому и спрашиваю, что для меня, как для потенциального пользователя или соавтора вашей библиотеки, они пока не очевидны.
Цитата Сообщение от pgb Посмотреть сообщение
это простая реализация
В чем заключается простота? В интуитивно понятном синтаксисе? Простота с точки зрения обработки процессором? Быть может, это просто меньше кода в заголовочнике?
Цитата Сообщение от pgb Посмотреть сообщение
в случае чего можно подправить, удобство работы, отладки
В каком случае? В случае, если Array окажется более медленным, чем std::vector? В чем конкретно заключается удобство? Только лишь в синтаксисе?
Цитата Сообщение от pgb Посмотреть сообщение
на основе чего можно создавать новые классы которые наследуют удобный функционал
Какая-то неведомая сила запрещает наследоваться от std::vector?
Цитата Сообщение от pgb Посмотреть сообщение
Проблема большинства в том что они хотят чтобы им всё выложили на блюдечке
В таком случае, язык C++ тоже выложен на блюдечке. Всем ли он вас устраивает?
Цитата Сообщение от pgb Посмотреть сообщение
Я жил без отца да и мама со мной ничем не занималась
В японских аниме после этого обычно на голову падает огромный боевой человекообразный робот, ты садишься в него и идешь спасать Планету в окружении пары десятков школьниц. Боюсь также представить, кого не было из родни и какие горячие точки довелось пройти Бьярне Страуструпам, Джеймсам Гослингам и Гвидо ван Россумам, раз они сумели провернуть такие могучие инструменты разработки...
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
18.05.2023, 21:23  [ТС] 88
Обновил гит. Непонятные ошибки..
Код
expected ')' before '&' token
член "POINTER<CHAR>::sz" (объявлено в строке 195 из "D:\Cpp\Library\_types.hpp") недоступно
член "POINTER<CHAR>::pnt" (объявлено в строке 194 из "D:\Cpp\Library\_types.hpp") недоступно
член "POINTER<WCHAR>::sz" (объявлено в строке 275 из "D:\Cpp\Library\_types.hpp") недоступно
член "POINTER<WCHAR>::pnt" (объявлено в строке 274 из "D:\Cpp\Library\_types.hpp") недоступно
необходимо включить ключевое слово <typeinfo> перед использованием typeid
необходимо включить ключевое слово <typeinfo> перед использованием typeid
Не могу разобраться в чём дело.
C++
1
2
#include "_error.hpp"
#include "_types.hpp"
Просто подключите два заголовочных файла и скомпилируйте. Ошибки то пропадают, то снова появляются, не понятно как исправить. Буду рад помощи.
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
18.05.2023, 21:50 89
Цитата Сообщение от pgb Посмотреть сообщение
Просто подключите два заголовочных файла
начал я их подключать. Потребовалось ещё пару файлов.

первые же строки:
_error.hpp:40:45: warning: backslash-newline at end of file
40 | #define CATCH }catch(Error err){err.info();}\
я точно не понял, почему, но последней линией такой перенос - почему-то предупреждение. Вылечил просто добавлением пустой строки в конец файла.

далее
_types.hpp: In function ‘std::ostream& operator<<(std::ostream&, STRING&)’:
_error.hpp:41:13: error: ISO C++ forbids declaration of ‘exception’ with no type [-fpermissive]
41 | catch(const exception &exc){Error::exce(typeid(exc).name(),exc.what());}
| ^~~~~~~~~
_types.hpp:437:17: note: in expansion of macro ‘CATCH’
437 | CATCH
| ^~~~~
тут наступаешь на грабли от привычки using namespace std;

правильно так
catch(const std::exception &exc){Error::exce(typeid(exc).name(),exc.what());}

Добавлено через 1 минуту
https://onlinegdb.com/ZrhRllarOc

Добавлено через 1 минуту
и, поскольку везде, где этот макрос будет, также всё равно потребуется и заголовок, то раскомментируй в начале файла
//#include <exception>
1
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
18.05.2023, 21:54  [ТС] 90
Цитата Сообщение от Алексей1153 Посмотреть сообщение
я точно не понял, почему, но последней линией такой перенос - почему-то предупреждение. Вылечил просто добавлением пустой строки в конец файла.
Это так макрос работает, обязательно должен быть перенос строки на новую, гит просто обрезает последнюю пустую строку.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
тут наступаешь на грабли от привычки using namespace std;
ясно, спасибо

остались эти
Код
член "POINTER<CHAR>::sz" (объявлено в строке 195 из "D:\Cpp\Library\_types.hpp") недоступно
член "POINTER<CHAR>::pnt" (объявлено в строке 194 из "D:\Cpp\Library\_types.hpp") недоступно
член "POINTER<WCHAR>::sz" (объявлено в строке 275 из "D:\Cpp\Library\_types.hpp") недоступно
член "POINTER<WCHAR>::pnt" (объявлено в строке 274 из "D:\Cpp\Library\_types.hpp") недоступно
необходимо включить ключевое слово <typeinfo> перед использованием typeid
необходимо включить ключевое слово <typeinfo> перед использованием typeid
Они то пропадают, то снова появляются. В чём дело не понятно.

Добавлено через 1 минуту
Цитата Сообщение от Алексей1153 Посмотреть сообщение
то раскомментируй в начале файла
забыл раскомменторовать, когда тестил, по разному проверял просто
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
18.05.2023, 22:07 91
pgb, вообще, от макросов желательно избавляться, поэтому я бы сделал хотя бы так

_error.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename F>
void TRY_CATCH(F&& f)noexcept
{
    try
    {
        std::forward<F>(f)();
    }
    catch(Error err)
    {
        err.info();
    }
    catch(const std::exception &exc)
    {
        Error::exce(typeid(exc).name(),exc.what());
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    TRY_CATCH([]
    {
        
    });
 
    int i{};
    TRY_CATCH([&i]
    {
        i=1;
    });
    
    TRY_CATCH([&i]
    {
        throw std::exception{};
    });
}
Добавлено через 13 секунд
Цитата Сообщение от pgb Посмотреть сообщение
остались эти
а их как повторить ?

Добавлено через 5 минут
Цитата Сообщение от Алексей1153 Посмотреть сообщение
void TRY_CATCH(F&& f)noexcept
ещё noexcept дописал )
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
18.05.2023, 22:07  [ТС] 92
Цитата Сообщение от Алексей1153 Посмотреть сообщение
а их как повторить ?
У меня они сами появляются, то пропадают, вообще мистика какая то..
Цитата Сообщение от Алексей1153 Посмотреть сообщение
вообще, от макросов желательно избавляться, поэтому я бы сделал хотя бы так
Хорошо. Протестирую ваш вариант.
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
18.05.2023, 22:10 93
pgb, а если те поля сделать public, такие ошибки всё равно появляются ?
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
18.05.2023, 22:32  [ТС] 94
Цитата Сообщение от Алексей1153 Посмотреть сообщение
если те поля сделать public, такие ошибки всё равно появляются ?
Раньше пробовал, нормально было, без предупреждений. Потом и в perotected тоже нормально было.
Сейчас переместил в public, теперь куча мала стало
Код
идентификатор "pnt" не определен
идентификатор "sz" не определен
идентификатор "tl" не определен
...
Это наверно из-за Kill функции в private
0
Модератор
Эксперт Java
2693 / 1192 / 386
Регистрация: 11.08.2017
Сообщений: 3,677
Записей в блоге: 2
18.05.2023, 23:21 95
А если собрать с -Werror -Wall -Wextra -Wpedantic или /W4 /WX?
Хотя судя по теме мне даже страшно представить что будет))

Добавлено через 37 секунд
Библиотеки надо писать чтобы собиралось с этими флагами
0
34 / 23 / 11
Регистрация: 18.02.2021
Сообщений: 87
18.05.2023, 23:55 96
Зачем этим заниматься? Если есть готовые решения и библиотеки, которые достигли достаточной известности чтобы называться стандартными. А стандарт вы сами понимаете он и в африке стандарт - это портируемость кода, документация к нему, унифицируемость, возможность кроссплатформенных решений и т.д. и т.п.

Добавлено через 3 минуты
Ну то есть например вот работа с БД. Можно например отказаться от SQL и придумывать свой язык для обращения с БД, но где это будет применимо вне рамок разработок. Веб-сервер, уже есть curl для C/C++ много всякого позволяющего работать по сети. Графические примочки, это у каждой ОС своя, или можно брать кроссплатформенные решения типа Qt. Есть например OpenGL и прочие библиотеки, графические движки даже есть в них надо только въехать и можно делать на всем готовом.
0
фрилансер
5841 / 5368 / 1102
Регистрация: 11.10.2019
Сообщений: 14,336
19.05.2023, 07:29 97
Pro100Slavik, есть у человека свободное время и желание понаступать на грабли. Его право
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
19.05.2023, 11:11  [ТС] 98
Цитата Сообщение от Pro100Slavik Посмотреть сообщение
Зачем этим заниматься? Если есть готовые решения и библиотеки, которые достигли достаточной известности чтобы называться стандартными. А стандарт вы сами понимаете он и в африке стандарт - это портируемость кода, документация к нему, унифицируемость, возможность кроссплатформенных решений и т.д. и т.п.
А вы попробуйте на этих готовых стандартных решениях сделать что-то большое, не в main несколько функций поиспользовать, а разработать полноценный проект. Вот тогда такие глупые вопросы отпадут само собой, и вам самим захочется сделать эти так называемые стандартные функции по своему. А рассуждать как прекрасны уже готовые решения может только тот кто на них толком ничего и не делал..

Вот честно, я бы с радостью использовал готовое, если бы оно не было таким шлаком.. Если даже на уровне написания чего-то с нуля возникают масса проблем даже на нативном языке, то что будет если использовать так называемые готовые стандартные и др. решения вы даже представить не можете, так как не разрабатывали на этом что-то большое. Над обычными приложениями зачастую работают целыми компаниями десятки, сотни, а то и тысячи человек, там да пень через колоду решают кое-как проблемы и собирают что-то. Но если вы один начнёте делать, то ни в жизнь никогда вам на этих готовых инструментах не довести до релиза свой продукт, 100% возникнет потребность некоторых доработок или некоторые баги в этих готовых решениях и вы уже не сдвинитесь с места..

Вот к примеру сейчас у меня возникли проблемы с предупреждениями, но это решаемо, на нативном языке ещё можно найти причину и устранить. А если это будет из-за сторонней библиотеки, то решение сводится к 50% а то и меньше. Короче если нечего ответить по теме, помочь мне с решением, то лучше не писать тут подобных мнений, грабли есть везде, но там где начинаешь с нуля, в чистом поле, там один раз наступишь, а другой раз обойдёшь, а если используешь что-то стороннее, то это считай, что идёшь по заминированному полю, и не факт, что сможешь это поле пройти..
0
2702 / 1295 / 253
Регистрация: 16.03.2008
Сообщений: 6,028
Записей в блоге: 2
19.05.2023, 11:19 99
Цитата Сообщение от pgb Посмотреть сообщение
А вы попробуйте на этих готовых стандартных решениях сделать что-то большое
Легко и не раз. И на MSных либах писал, и на Qt-шных. Все упирается в умение читать и понимать документацию. При чем реально те же Qt шные проекты написанные для ПК собирал (и они работали) даже на symbian (только потом, надо было внести правки учитывающие разность геометрии монитора и экрана телефона, но это спокойно решается условной компиляцией).

Интересно почему только у вас возникают страшные проблемы с готовыми, хорошо протестированными решениями.? При этом вы даже не успеваете попробовать на них сделать что то более менее серьезное. А в оправдание только сказки про "я посмотрел и сразу понял" да еще и с учетом уровня вопросов в этой теме.
0
-286 / 21 / 0
Регистрация: 22.09.2015
Сообщений: 1,067
19.05.2023, 11:51  [ТС] 100
Цитата Сообщение от voral Посмотреть сообщение
Легко и не раз.
А тебе я уже тысячу раз говорил, если тебя устраивает хорошо, но не надо меня агитировать постоянно, я своё мнение по этому поводу уже высказал.
0
19.05.2023, 11:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2023, 11:51
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

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

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