Константы, определенные макросом C++, в качестве аргумента, проверяемого во время компиляцииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Константы, определенные макросом C++, в качестве аргумента, проверяемого во время компиляции

Сообщение Anonymous »

То, что я имею в виду, обычно решается с помощью перечисления:

Код: Выделить всё

enum AddrFam { af_unspec, af_inet, af_inet6 };
void myfunc(AddrFam) {}
void myfunc(int) {}

int main() {
myfunc(af_unix);
return 0;
}
Это приводит к ошибке компилятора:

Код: Выделить всё

error: ‘af_unix’ was not declared in this scope
15 |     myfunc(af_unix);
|            ^~~~~~~
Это ожидаемо. Но как я могу добиться того же с предопределенными константами в верхнем регистре? Я не могу использовать уже предопределенные константы AF_UNSPEC, AF_INET, AF_INET6 в перечислении, поэтому

Код: Выделить всё

myfunc(AF_UNIX);
компилируется без ошибок.
Изменить: Я намерен использовать только AF_UNSPEC, AF_INET, AF_INET6 . Другие константы, такие как AF_UNIX или AF_PACKET или все другие оставшиеся определенные семейства адресов, использовать не следует. Я мог бы выполнить эту проверку во время выполнения с обработкой ошибок, но было бы неплохо, если бы компилятор мог обнаружить нежелательное использование.

Подробнее здесь: https://stackoverflow.com/questions/784 ... mpile-time
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»