170 похожих чатов

Привет! Можно ли сделать define, который умеет в переменное число аргументов? Хочу,

чтобы строчка 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__'ы), но вдруг за последние несколько лет что-то поменялось.

15 ответов

18 просмотров

#define DECLARE(...) enum class Types { __VA_ARGS__ };

Boost.PP такое умеет https://www.boost.org/doc/libs/1_74_0/libs/preprocessor/doc/index.html Но от этой технологии можно кукушкой поехать - отладка там крайне неприятная

Danya🔥
#define DECLARE(...) enum class Types { __VA_ARGS_...

А ну только там не будет разделения с запятой, сори

Посмотри как работают https://github.com/quicknir/wise_enum https://github.com/aantron/better-enums а можно просто их поюзать

Vlad
для этого добавили __VA_OPT__

Для того, чтобы не было разделения запятой?

https://godbolt.org/z/f8zjzK

Danya🔥
Для того, чтобы не было разделения запятой?

я неправильно понял, прошу прощения это чтобы не городить страшные конструкции для обработки края __VA_ARGS__, конечно

Ruzal-Ibragimov Автор вопроса
Vlad
https://godbolt.org/z/f8zjzK

Тут же надо Fки заводить руками)

Ruzal Ibragimov
Тут же надо Fки заводить руками)

заведите разок сколько надо, и пользуйтесь на здоровье как я понимаю, макросы рекурсивно не раскрываются, к сожалению или к счастью

Ruzal-Ibragimov Автор вопроса
Vlad
заведите разок сколько надо, и пользуйтесь на здор...

В общем-то спасибо, но хотелось бы для любого числа аргументов решать задачу)

Вам точно не будет достаточно библиотеки magic_enum для своей задачи?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта