чтобы строчка DECLARE(A, B, C) раскрывалась в следующее:
enum class Types: std::size_t { A, B, C };
const map<Types, std::string> mapa = {{Types::A, "A"}, {Types::B, "B"}, {Types::C, "C"}};
Но при этом число аргументов должно быть нефиксированным, то есть их может быть 3, может быть любое другое положительное число.
Гуглеж по инету сказал, что такое невозможно (ни через variadic, ни через __COUNTER__'ы), но вдруг за последние несколько лет что-то поменялось.
#define DECLARE(...) enum class Types { __VA_ARGS__ };
Boost.PP такое умеет https://www.boost.org/doc/libs/1_74_0/libs/preprocessor/doc/index.html Но от этой технологии можно кукушкой поехать - отладка там крайне неприятная
А ну только там не будет разделения с запятой, сори
Посмотри как работают https://github.com/quicknir/wise_enum https://github.com/aantron/better-enums а можно просто их поюзать
для этого добавили __VA_OPT__
Для того, чтобы не было разделения запятой?
https://godbolt.org/z/f8zjzK
я неправильно понял, прошу прощения это чтобы не городить страшные конструкции для обработки края __VA_ARGS__, конечно
Тут же надо Fки заводить руками)
заведите разок сколько надо, и пользуйтесь на здоровье как я понимаю, макросы рекурсивно не раскрываются, к сожалению или к счастью
В общем-то спасибо, но хотелось бы для любого числа аргументов решать задачу)
удачи вам в этом начинании
Вам точно не будет достаточно библиотеки magic_enum для своей задачи?
проще уж кодген тогда прикрутить
Обсуждают сегодня