Набор утилит C++20, отсутствующих в стандартной библиотеке.
ScL.Utility — header-only модуль инструментария ScL Toolkit, предоставляющий помощников для метапрограммирования на этапе компиляции, утилиты препроцессора и расширенные свойства типов (type traits).
Добавьте как подкаталог в CMake и свяжите с интерфейсной целью:
add_subdirectory(module/utility)
target_link_libraries(your_target PRIVATE scl::utility)
Затем подключите общий заголовок или заголовки отдельных компонентов:
#include <scl/utility.h> // всё
#include <scl/utility/meta.h> // только meta
| Компонент | Заголовок | Описание |
|---|---|---|
| type_name | <scl/utility/meta/type.h> |
Извлечение имени типа на этапе компиляции |
| enum_name | <scl/utility/meta/enum.h> |
Извлечение имени члена перечисления на этапе компиляции |
| symbol_name | <scl/utility/meta/symbol.h> |
Извлечение имени функции/члена на этапе компиляции |
| Компонент | Заголовок | Описание |
|---|---|---|
| SCL_FORWARD | <scl/utility/preprocessor/forward.h> |
Макрос-идентификатор для проброса токенов |
| SCL_COUNTER | <scl/utility/preprocessor/counter.h> |
Счётчик времени компиляции через ADL |
| Компонент | Заголовок | Описание |
|---|---|---|
| detection | <scl/utility/type_traits/detection.h> |
Идиома обнаружения (is_detected и др.) |
| forward_like | <scl/utility/type_traits/forward_like.h> |
Проброс с категорией значения другого типа |
| member_like | <scl/utility/type_traits/member_like.h> |
Декомпозиция свойств указателей на члены |
| overload_cast | <scl/utility/type_traits/overload_cast.h> |
Разрешение неоднозначности перегруженных функций |
#include <scl/utility/meta/type.h>
#include <scl/utility/meta/enum.h>
#include <iostream>
enum class Color { Red, Green, Blue };
int main() {
std::cout << scl::type_name<std::vector<int>>() << std::endl;
std::cout << scl::enum_name<Color::Red>() << std::endl;
}