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

Сообщение Re[15]: Определение регулярных последовательностей статическ от 16.12.2024 14:56

Изменено 16.12.2024 15:44 rg45

Re[15]: Определение регулярных последовательностей статическ
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Я ответил в том смысле, что с извращениями могу и сам, а менять одно извращение (традиционный сишный развесистый стиль, в котором все хотя бы хорошо видно и управляемо) на ненавистную магию (которая радует исключительно до того момента, когда из-за какой-нибудь мелкой ошибки все уродливые потроха этой магии не вылезут наружу) просто не вижу смысла.


Ну то, что с извращениями ты можешь, я ни на секунду не сомневался. Мой подход, возможно, не прост в реализации, зато даёт как нельзя более простое и естественное использование. Например, рекурсивный обход дерева конфигурационных параметров из этого примера
Автор: rg45
Дата: 14.12 23:23
мог бы выглядеть примерно так:

//---------------------------------------------------------------------------------
auto SomeOperation(Numeric auto&&) {/*. . .*/}
auto SomeOperation(String auto&&) {/*. . .*/}
auto SomeOperation(Range auto&&) {/*. . .*/}

auto SomeOperation(Aggregate auto&& t)
{
    return aggregates::Apply(t, [](auto&&...x){ return (SomeOperation(x) | ...); });
}
//---------------------------------------------------------------------------------
struct {
    constexpr auto operator()(Numeric auto&&) const {/*. . .*/}
    constexpr auto operator()(String auto&&) const {/*. . .*/}
    constexpr auto operator()(Range auto&&) const {/*. . .*/}
    constexpr auto operator()(auto&&...) const {/*. . .*/}

    constexpr auto operator()(Aggregate auto&& t) const { return aggregates::Apply(t, *this}); }

} inline constexpr AnotherOperation;
//---------------------------------------------------------------------------------
struct {
// . . .
} inline constexpr Config;

int main()
{
    SomeOperation(Config);
    AnotherOperation(Config);
}


Причем, SomeOperation, AnotherOperation, etc могут быть как run-time, так и compile-time операциями. Весь фокус, как можно догадаться, находится внутри aggregates::Apply, который лежит потихоньку в отдельном файле и есть не просит.

Но тебе такое "извращение", конечное же, не подходит. Тебе нужно, чтобы твоё "срала-мазала" было размазано тонким слоем по всей программе
Re[15]: Определение регулярных последовательностей статическ
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Я ответил в том смысле, что с извращениями могу и сам, а менять одно извращение (традиционный сишный развесистый стиль, в котором все хотя бы хорошо видно и управляемо) на ненавистную магию (которая радует исключительно до того момента, когда из-за какой-нибудь мелкой ошибки все уродливые потроха этой магии не вылезут наружу) просто не вижу смысла.


Ну то, что с извращениями ты можешь, я ни на секунду не сомневался. А мой подход, возможно, не прост в реализации, зато даёт как нельзя более простое и естественное использование. Например, рекурсивный обход дерева конфигурационных параметров из этого примера
Автор: rg45
Дата: 14.12 23:23
мог бы выглядеть примерно так:

//---------------------------------------------------------------------------------
auto SomeOperation(Numeric auto&&) {/*. . .*/}
auto SomeOperation(String auto&&) {/*. . .*/}
auto SomeOperation(Range auto&&) {/*. . .*/}

auto SomeOperation(Aggregate auto&& t)
{
    return aggregates::Apply(t, [](auto&&...x){ return (SomeOperation(x) | ...); });
}
//---------------------------------------------------------------------------------
struct {
    constexpr auto operator()(Numeric auto&&) const {/*. . .*/}
    constexpr auto operator()(String auto&&) const {/*. . .*/}
    constexpr auto operator()(Range auto&&) const {/*. . .*/}
    constexpr auto operator()(auto&&...) const {/*. . .*/}

    constexpr auto operator()(Aggregate auto&& t) const { return aggregates::Apply(t, *this}); }

} inline constexpr AnotherOperation;
//---------------------------------------------------------------------------------
struct {
// . . .
} inline constexpr Config;

int main()
{
    SomeOperation(Config);
    AnotherOperation(Config);
}


Причем, SomeOperation, AnotherOperation, etc могут быть как run-time, так и compile-time операциями. Весь фокус, как можно догадаться, находится внутри aggregates::Apply, который лежит потихоньку в отдельном файле и есть не просит.

Но тебе такое "извращение", конечное же, не подходит. Тебе нужно, чтобы твоё "срала-мазала" было размазано тонким слоем по всей программе