Страницы

Поиск по вопросам

пятница, 12 апреля 2019 г.

Параметр функции, содержащий одно из нескольких значений

Каким образом можно описать параметр функции?
Допустим есть функция: void stick(int a, inb &b, /* ? */ direct)
Собственно вместе с этим direct я передаю один из двух параметров - right и left. И в теле функции должна происходить проверка, на указанный параметр.


Ответ

Попробуйте так:
enum Direction { Left, Right };
void stick(int a, inb &b, Direction d); { switch (d) { case Left: break; case Right: break; } // ... }

Заметьте, что enum в версиях C++ до C++11 даёт достаточно слабую типизацию. Например, такой код компилируется:
enum Direction { Left, Right };
enum Direction2 { North = 5, South = 7 };
void f(Direction d) { switch (d) { case North: break; case South: break; } // ... }
Для компилятора все enum'ы — просто числовые константы.
Но начиная с C++11, лучше использовать строго типизированный enum
enum class Direction { //^^^^^ Left, Right };
enum WrongDirection { Left = 1, Right = 0 };
void f(Direction d) { switch (d) { case Direction::Left: // а не WrongDirection::Left break; case Direction::Right: break; } // ... }
Здесь компилятор не даст вам случайно использовать неправильный тип.

Комментариев нет:

Отправить комментарий