Size: a a a

2020 October 29

AN

Alexander N in pro.cxx
Constantine Drozdov
Я понимаю, что докапываюсь, но я бы не стал экспортировать определение byte в char8_t (и почему не signed char?), от этого имени я жду все-таки aliasable
В винде дак вообще BYTE == unsigned char
источник

V

Vladimir in pro.cxx
Всем привет, как бороться с легаси C-style enum'ами которы грязнят глобал неймспейс? Есть два инклуда. Оба содержат плохие enum'ы. Так они еще и пересекаются именами (значениями enum'ов). Но нужно их оба заиклудить. Неужели единственный вариант это создавать 2 неймспейса и прямо в теле каждого неймспейса делать по инклуд директиве?
источник

IZ

Ilia Zviagin in pro.cxx
Vladimir
Всем привет, как бороться с легаси C-style enum'ами которы грязнят глобал неймспейс? Есть два инклуда. Оба содержат плохие enum'ы. Так они еще и пересекаются именами (значениями enum'ов). Но нужно их оба заиклудить. Неужели единственный вариант это создавать 2 неймспейса и прямо в теле каждого неймспейса делать по инклуд директиве?
0) namespace
1) enum class
2) расслабиться
источник

IZ

Ilia Zviagin in pro.cxx
Vladimir
Всем привет, как бороться с легаси C-style enum'ами которы грязнят глобал неймспейс? Есть два инклуда. Оба содержат плохие enum'ы. Так они еще и пересекаются именами (значениями enum'ов). Но нужно их оба заиклудить. Неужели единственный вариант это создавать 2 неймспейса и прямо в теле каждого неймспейса делать по инклуд директиве?
Учти, если это НЕ ТВОИ enum — их класть в namespace — не очень и можно.
источник

AN

Alexander N in pro.cxx
Я ещё иногда помещал енумы в класс.. Обычные правда
источник

AT

Anatoly Tomilov in pro.cxx
Vladimir
Всем привет, как бороться с легаси C-style enum'ами которы грязнят глобал неймспейс? Есть два инклуда. Оба содержат плохие enum'ы. Так они еще и пересекаются именами (значениями enum'ов). Но нужно их оба заиклудить. Неужели единственный вариант это создавать 2 неймспейса и прямо в теле каждого неймспейса делать по инклуд директиве?
использовать full qualified name нельзя?
источник

ГH

Гласси Hudobin in pro.cxx
Vladimir
Всем привет, как бороться с легаси C-style enum'ами которы грязнят глобал неймспейс? Есть два инклуда. Оба содержат плохие enum'ы. Так они еще и пересекаются именами (значениями enum'ов). Но нужно их оба заиклудить. Неужели единственный вариант это создавать 2 неймспейса и прямо в теле каждого неймспейса делать по инклуд директиве?
пересекающимся енумам делать типа
#include <wincrypt.h>
#define myX509_NAME X509_NAME
#undef X509_NAME
#include <openssl/x509.h>
источник

AF

Aidar Fattakhov in pro.cxx
Vladimir
Всем привет, как бороться с легаси C-style enum'ами которы грязнят глобал неймспейс? Есть два инклуда. Оба содержат плохие enum'ы. Так они еще и пересекаются именами (значениями enum'ов). Но нужно их оба заиклудить. Неужели единственный вариант это создавать 2 неймспейса и прямо в теле каждого неймспейса делать по инклуд директиве?
донести до автора либы
источник

IZ

Ilia Zviagin in pro.cxx
Перенесено https://t.me/proalgorithms
источник

RI

Ruzal Ibragimov in pro.cxx
Привет!
Можно ли сделать 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__'ы), но вдруг за последние несколько лет что-то поменялось.
источник

D

Danya in pro.cxx
Ruzal Ibragimov
Привет!
Можно ли сделать 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__'ы), но вдруг за последние несколько лет что-то поменялось.
#define DECLARE(...) enum class Types { __VA_ARGS__ };
источник

AP

Antony Polukhin in pro.cxx
Ruzal Ibragimov
Привет!
Можно ли сделать 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__'ы), но вдруг за последние несколько лет что-то поменялось.
Boost.PP такое умеет https://www.boost.org/doc/libs/1_74_0/libs/preprocessor/doc/index.html

Но от этой технологии можно кукушкой поехать - отладка там крайне неприятная
источник

D

Danya in pro.cxx
Danya
#define DECLARE(...) enum class Types { __VA_ARGS__ };
А ну только там не будет разделения с запятой, сори
источник

N

Neargye in pro.cxx
Ruzal Ibragimov
Привет!
Можно ли сделать 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__'ы), но вдруг за последние несколько лет что-то поменялось.
Посмотри как работают
https://github.com/quicknir/wise_enum
https://github.com/aantron/better-enums

а можно просто их поюзать
источник

D

Danya in pro.cxx
Ну и можешь ещё в Pure C чате спросить, там есть @hirrolot, который собаку съел на сишном препроцессоре
источник

RI

Ruzal Ibragimov in pro.cxx
Ух, накидали ссылок, спасибо, гляну, приду позже с апдейтом)
источник

H

Hirrolot in pro.cxx
Danya
А ну только там не будет разделения с запятой, сори
будет
источник

H

Hirrolot in pro.cxx
источник

RI

Ruzal Ibragimov in pro.cxx
Не, смотрите, часть с енамом понятно как делать(потому что есть __VA_ARGS__), мне бы часть с мапой понять, потому что там variadic не помогает
источник

D

Danya in pro.cxx
Ruzal Ibragimov
Не, смотрите, часть с енамом понятно как делать(потому что есть __VA_ARGS__), мне бы часть с мапой понять, потому что там variadic не помогает
А вот оно что
источник