• R/O
  • SSH

libcpptools: Source Tree

This library contains code that extends and simplifies different operations
for C++ language based programs


Name Size Rev. Time Author Log Message
.hgeol 90 e19dc07fe76a 2015-04-10 02:40:33 s.gusarov Added .hgeol file
.hgignore 344 3acb2de6cde5 2023-02-26 05:38:50 Sergey Gusarov <laborer2008@gmail.com> Copy file_property.rc.template before...
.hgsub 201 bc940b7c65c7 2020-01-10 00:16:06 Sergey Gusarov Fixed ctools URL
.hgsubstate 157 f3744fa7f254 2024-03-03 11:46:37 Sergey Gusarov <laborer2008@gmail.com> Documented and checked all cmake buil...
.hgtags 0 3953608804eb 2014-10-26 02:26:32 s.gusarov Added project tree
CMakeLists.txt 4.57 k f3744fa7f254 2024-03-03 11:46:37 Sergey Gusarov <laborer2008@gmail.com> Documented and checked all cmake buil...
LICENSE 16.33 k 8f1fd35449d9 2014-12-08 03:04:24 laborer2008 Added license to scripts
README.rst 620 35cbc97bbe9e 2020-01-10 00:11:56 Sergey Gusarov New repo hosting on OSDN
README_RU.rst 6.62 k 35cbc97bbe9e 2020-01-10 00:11:56 Sergey Gusarov New repo hosting on OSDN
build 34f215437462 2014-11-03 09:55:07 s.gusarov Now library (with libctools) can be b...
build_info c2fd1130d9aa 2023-02-26 05:41:44 Sergey Gusarov <laborer2008@gmail.com> Removed redundant namespace for template
cmake_android_ndk.py 377 20db04aa9ba3 2022-08-30 17:19:03 Sergey Gusarov <laborer2008@gmail.com> Added android ndk build script
cmake_clang.py 362 e9b440edc404 2018-10-10 12:58:24 Sergey Gusarov Some PEP-8 fixes
cmake_gcc.py 360 e9b440edc404 2018-10-10 12:58:24 Sergey Gusarov Some PEP-8 fixes
cmake_icc.py 360 e9b440edc404 2018-10-10 12:58:24 Sergey Gusarov Some PEP-8 fixes
cmake_msvc2010.py 357 e9b440edc404 2018-10-10 12:58:24 Sergey Gusarov Some PEP-8 fixes
cmake_msvc2012.py 357 e9b440edc404 2018-10-10 12:58:24 Sergey Gusarov Some PEP-8 fixes
cmake_msvc2013.py 357 e9b440edc404 2018-10-10 12:58:24 Sergey Gusarov Some PEP-8 fixes
cmake_msvc2015.py 357 e9b440edc404 2018-10-10 12:58:24 Sergey Gusarov Some PEP-8 fixes
doc_develop 3f8a61dc76f5 2022-08-27 03:38:21 Sergey Gusarov <laborer2008@gmail.com> Added C++20 draft standard
include a1485867803a 2022-08-30 18:07:47 Sergey Gusarov <laborer2008@gmail.com> Code style fixes
pack.py 460 593599e8fce1 2022-08-26 22:27:47 Sergey Gusarov <laborer2008@gmail.com> Subrepo update Googletest updated to ...
scripts c56dfd3d9daa 2023-02-26 05:17:38 Sergey Gusarov <laborer2008@gmail.com> Use ctools template for file_property.rc
src c830cab7bbab 2017-12-11 04:12:20 Sergey Gusarov Added empty timer.cpp This fixes link...
tests 7c9201994e2f 2024-02-13 05:16:22 Sergey Gusarov <laborer2008@gmail.com> Bumped tests/cmake_minimum_required d...

README_RU.rst

Общие сведения

Библиотека для упрощения и расширения различных операций в программах на языке C++. Для выполнения низкоуровневых операций полагается полностью на libctools.

Макросы и определения экспортируемые библиотекой имеют префикс CPT. Все переменные, константы и функции располагаются в пространстве имён cpptools.

Состав

  • Поддержка улучшенной иерархии исключений, собирающих stacktrace;
  • Классы для упрощения работы с потоками;
  • Различные функции и классы для улучшения работы в C++ с enum'ами.

Планируется:

  • Расширенная поддержка исключений;
  • Аттрибуты классов.

Использование

libctools находится в интерфейсе этой библиотеки. Тем самым формируется иерархия утилит со сходным назначением, но выполненных на разных языках и в разной парадигме. Тем не менее, активное использование libctools не рекомендуется из-за нарушения парадигмы C++. Ситуация полностью аналогична присутствию заголовочных файлов libc в исходном коде на C++. Они не запрещены, а просто не рекомендуются. И многие программисты их используют от случая к случаю. Предлагается часть таких обращений к libc заменить на обращения к libctools.

Из libctools рекомендуется использовать:

  • Препроцессор и всё что с ним связано (там где возникает в этом потребность). И все изменения связанные с препроцессором вносить в ту библиотеку, тем самым оставляя эту библиотеку максимально свободной от препроцессорных определений;

  • Код связанный с обработкой различных системных ситуаций и обращению к операционной системе. Например:

    • Загрузка/выгрузка динамических библиотек;
    • Получение иерархии вызовов (stack trace);
    • Обработка аварийных ситуаций (posix signals, access violation).

    Современные операционные системы имеют, как правило, С-интерфейс. Поэтому без использования парадигм C на уровне сопряжения с кодом C++ не обойтись. Применение libctools в таких случаях позволяет реализовать повторное использование кода;

  • Механизмы и возможности временно отсутствующие в C++ коде (например, из-за недостатка времени на разработку), как fallback (запасное решение). Например, речь можно вести о развитой системе логирования и трассировки отладочных сообщений.

Как и libctools, эту библиотеку нужно инициализировать и финализировать (здесь обязательно). Для этого используются функции из cpptools.hpp .

Целевые конфигурации

Любые, на которых работают компиляторы C++11 и выше. В настоящее время (конец 2014) нет идеального компилятора, который умеет C++11 на 100%. И такая ситуация, по видимому, сохранится ещё на несколько лет. Плюс иногда нужно работать не с самыми свежими платформами. Поэтому для целей практики решено ввести ограничения на минимально-поддерживаемые версии компиляторов:

  • Microsoft Visual Studio 2010 (примечательна тем, что поддерживает Windows XP) и выше;
  • Gcc 4.7 и выше - TODO;
  • Clang 3.4 и выше - TODO.

Большая часть замечаний из аналогичной секции libctools применима и здесь.

Зависимости

См. аналогичную секцию libctools.

Сборка

Как и для libctools, существует 4 варианта использования библиотеки.

Дополнительно следует отметитить, что для бессборочного метода нужно указать пути для поиска заголовочных файлов include, build_info/include, libctools/include, libctools/build_info/include и линковать все модули из src, libctools/src и подкаталогов src и libctools/src (если таковые нужны).

Если при сборке определён идентификатор CPT_BOOST_SUPPORT, то библиотека будет поддерживать работу с boost. Поддержка boost в настоящее время находится в зачаточном состоянии. Библиотеку boost должен предоставлять внешний проект, который использует libcpptools.

Тестирование

Смотри подкаталог tests.

TODO

Сборка тестов с MS VC++2010

Show on old repository browser