Информация об изменениях

Сообщение Re[15]: Что не так с C++ - компил-таймовый C++ от 09.12.2024 9:42

Изменено 09.12.2024 10:24 rg45

Re[15]: Что не так с C++ - компил-таймовый C++
Здравствуйте, 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 не предоставил тебе разжёванного решения на блюдечке?

Да специфика С++ такова, что работать на нём с выключенными мозгами не получается, как правило. Если тебе это не подходит, ну, возможно, тебе следует поискать для себя более "приятные" языки.
Re[15]: Что не так с C++ - компил-таймовый C++
Здравствуйте, 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 не предоставил тебе разжёванного решения на блюдечке?

Да специфика С++ такова, что работать на нём с выключенными мозгами не получается, как правило. Если тебе это не подходит, ну, возможно, тебе следует поискать для себя более "приятные" языки.