Pull to refresh
8K+
34
Тимур@mrognor

C++ enthusiast and developer

15
Rating
11
Subscribers
Send message

Нет, но собирает не очень быстро

Ну я тоже полагал, что string_view будет работать, но на данный момент оно не работает.

Такое можно сделать. Единственный минус - использование сишного массива. К сожалению, std::string и std::string_view не являются структурными типами и их нельзя использовать в аннотациях.

Определим вспомогательную структуру для аннотации и enum:

struct enum_class_annotation
{
    char annotation[256];
};

enum class distribution_name : std::uint8_t
{
    alt [[=enum_class_annotation{"Alt linux"}]],
    arch [[=enum_class_annotation{"Arch linux"}, =enum_class_annotation{"Second annotation"}]],
};

Прямая печать:

    std::cout << "Code: ";
    static constexpr auto annotations =
        std::define_static_array(std::meta::annotations_of(^^distribution_name::arch));
    template for (constexpr auto ann : annotations)
        std::cout << [:std::meta::constant_of(ann):].annotation << " ";
    std::cout << std::endl;

Или функция для этого:

template<scoped_enum_json_type T> 
consteval std::pair<std::string_view, std::string_view> get_scoped_enum_value_name(const T& enum_obj)
{
    constexpr auto members = std::define_static_array(std::meta::enumerators_of(^^T));

    template for (constexpr auto& member : auto(members))
    {
        if constexpr (std::meta::has_identifier(member) && !std::meta::is_function(member))
        {
            constexpr auto member_name = std::meta::identifier_of(member);
            if (std::remove_cvref_t<T>([:member:]) == std::remove_cvref_t<T>(enum_obj))
            {
                constexpr auto annotations =
                    std::define_static_array(std::meta::annotations_of(member));

                template for (constexpr auto& ann : auto(annotations))
                    return {member_name, [:std::meta::constant_of(ann):].annotation};
            }
        }
    }

    // Inaccessible code
    return {"no_enum_representation", "none"};
}

...

    std::cout << "Function: ";
    constexpr auto res = get_scoped_enum_value_name(distribution_name::alt);
    std::cout << res.first << " " << res.second << std::endl;

Ну и вывод:

Вывод программы
Вывод программы

Мне нравится идея с аннотацией для енама, в будущем обязательно применю)

Для участников бета программы есть специальный чат, в котором состоят разработчики и можно получать информацию из первых уст. Я работаю над одним низкоуровневым проектом и ответы по поводу Wayland мне очень помогли, хочу выразить благодарность за это.

Рад, что оно все еще работает)

Мне не платят за статью) Я написал ее потому что захотел поделиться своим опытом с сообществом. Гайд по установке debian был добавлен для того, чтобы человек, который не имеет четкого представления об устройстве linux смог понять как это все работает. Про PROTODOWN добавил.

Спасибо за совет!

Конфиг ядра Debian подходит к ванильному ядру, я именно его и беру в репозитории. В моем случае изменения были как в драйвере, так и в ядре, поэтому сборка deb-пакета была оптимальным выбором. Я знаю про запуск виртуальной машины с помощью -kernel, но мне нужен был полноценный дистрибутив, и виртуальная машина проще для этого. Про VS Code я писал в тексте, я использую Code OSS, и он не умеет запускаться в контейнере.

Использование Debian обусловлено тем, что мне нужно было связать наш код с ядром и мне нужен был полноценный дистрибутив для этого. Тестировать на железном свиче тоже можно было, но это требует его перезагрузки, что занимает время. А виртуальную машину я могу за 10 секунд перезагрузить.

Спасибо за комментарий. В тексте я сказал, что контейнер необязателен и можно производить всё на хосте. Что по вашему мнению нужно добавить или изменить, чтобы статья стала хорошей?

А зачем ставить Gbox и AppGallery? У меня на телефоне LineageOS с Aurora Store, и я не испытываю никаких проблем. Aurora Store — это клиент для Play Market, и там есть всё, по крайней мере я нашел там всё, что мне нужно. С помощью Gapps я завел обычный YouTube, NFC через T-Pay. В итоге разницы с Андроидом нет.

Хорошо, добавлю в статью.

В том, что некоторые параметры, например вланы, могут идти в виде диапазона.

1

Information

Rating
524-th
Location
Москва, Москва и Московская обл., Россия
Works in
Registered
Activity