Re[15]: Что не так с C++ - компил-таймовый C++
От: rg45 СССР  
Дата: 09.12.24 09:42
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Счетчик вызовов должен занимать одну строчку, иначе с языком что-то не то.


Что-то не распарсил. Что за счётчитк вызовов? И что именно должно занимать одну строчку? Если какой-то абстрактный "счетчик" помогает в решении каких-то задач, при этом он прост в использовании, то кого волнует, сколько строчек занимает реализация этого счётчика?

P.S. Если разговор всё ещё идет про мой компайл-тайм счётчик
Автор: rg45
Дата: 27.11 18:42
(в чём я не уверен), то следует понимать, что число строк в этой реализации существенно избыточно. И сделано это намеренно — для того, чтобы лучше был понятен принцип действия этого счётчика (хотя, всё это без толку, как я вижу). Минимизированная реализация выглядит существенно более компактной:

http://coliru.stacked-crooked.com/a/af944f20258845e4

template <typename T, size_t I>
struct Declaration { friend constexpr auto value(Declaration); };

template <typename T, size_t I>
struct Definition : Declaration<T, I> {friend constexpr auto value(Declaration<T, I>) { return I; }};

template <typename T, size_t I, typename E>
concept Defined = requires {{sizeof(decltype(value(Declaration<T, I>{})))}; typename E; };

template<typename T, size_t I, typename E>
constexpr size_t firstUndefined() {
   if constexpr(Defined<T, I, E>) return firstUndefined<T, I + 1, E>();
   else return I;
}

template <typename T, typename E = decltype([]{})>
inline constexpr size_t peek = firstUndefined<T, 0, E>();

template <typename T, typename E = decltype([]{})>
inline constexpr size_t tick = value(Definition<T, peek<T, E>>{});


Ну, и в чём трагедия, иметь эти 20 строк кода в отдельном файле, в который даже заглядывать не обязательно? Ведь использование этого счётчика выглядит проще некуда: compile_time::tick<class X> — всё!. В чём твоя проблема — только в том, что Chat GPT не предоставил тебе разжёванного решения на блюдечке?

Да специфика С++ такова, что работать на нём с выключенными мозгами не получается, как правило. Если тебе это не подходит, ну, возможно, тебе следует поискать для себя более "приятные" языки.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 09.12.2024 10:25 rg45 . Предыдущая версия . Еще …
Отредактировано 09.12.2024 10:24 rg45 . Предыдущая версия .
Отредактировано 09.12.2024 10:05 rg45 . Предыдущая версия .
Отредактировано 09.12.2024 9:57 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.