end concepts examples
This commit is contained in:
@@ -204,8 +204,12 @@ namespace hack::concepts::modern
|
||||
// @brief Проверяет, является ли тип std::array
|
||||
// @details Обнаруживает std::array с конкретным размером
|
||||
// Полезно для алгоритмов, которые требуют знания размера на этапе компиляции
|
||||
template<typename T, std::size_t N>
|
||||
concept is_std_array = std::same_as<T, std::array<typename T::value_type, N>>;
|
||||
template<typename T>
|
||||
concept is_std_array = requires(T arr) {
|
||||
requires std::same_as<T, std::array<typename T::value_type, std::tuple_size_v<T>>>;
|
||||
arr.size();
|
||||
arr[0];
|
||||
};
|
||||
|
||||
// Универсальные концепты для категоризации
|
||||
// @brief Проверяет, является ли тип любым контейнером
|
||||
@@ -221,7 +225,7 @@ namespace hack::concepts::modern
|
||||
is_unordered_associative_container<T> ||
|
||||
is_container_adapter<T> ||
|
||||
is_fixed_array<T> ||
|
||||
is_std_array<T, std::tuple_size_v<T>>;
|
||||
is_std_array<T>;
|
||||
|
||||
// @brief Проверяет, является ли тип итерируемым
|
||||
// @details Обнаруживает любые типы, по которым можно итерироваться:
|
||||
@@ -276,15 +280,7 @@ namespace hack::concepts::modern
|
||||
template<typename T>
|
||||
concept is_contiguous_container = std::same_as<T, std::vector<typename T::value_type, typename T::allocator_type>> ||
|
||||
is_fixed_array<T> ||
|
||||
is_std_array<T, std::tuple_size_v<T>>;
|
||||
|
||||
// Концепты для алгоритмов
|
||||
// @brief Проверяет, поддерживает ли контейнер emplace-операцию
|
||||
// @details Обнаруживает контейнеры, которые могут создавать элементы на месте:
|
||||
// - vector::emplace_back(), map::emplace(), etc.
|
||||
// Позволяет избежать лишних копирований и перемещений
|
||||
template<typename Container, typename Value>
|
||||
concept can_emplace = requires(Container c, Value&& v) { c.emplace(std::forward<Value>(v)); };
|
||||
is_std_array<T>;
|
||||
|
||||
// @brief Проверяет, поддерживает ли контейнер добавление в начало
|
||||
// @details Обнаруживает контейнеры с push_front():
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
|
||||
#include "hack/patterns/ring_buffer.hpp"
|
||||
|
||||
// HERE
|
||||
// и нужно сделать реализацию где выводлится все в одной линии но при помощи цикла
|
||||
// типа такого:
|
||||
// for (auto i : range) hack::log(hack::log::line)(i);
|
||||
namespace hack
|
||||
{
|
||||
class log
|
||||
|
||||
Reference in New Issue
Block a user