Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Иванов_Андрей
10 / 10 / 0
Регистрация: 23.07.2014
Сообщений: 52
#1

Можно ли узнать, что в функцию передается именно элемент перечисления? - C++

01.08.2014, 20:06. Просмотров 315. Ответов 5
Метки нет (Все метки)

Добрый вечер всем. Возможно глупый вопрос, тем не менее: как грамотно организовать проверку входного параметра, если допустимые варианты указаны в перечислении перечислении?
например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
enum COLORS { 
    BLACK   = 1,
    WHITE   = 0
 };
 
class test
{
public:
    test(){
 
    }
    ~test(){
 
    }
    void setColor(int color){
        /**
        вот здесь надо как то определить правильность параметра
        не писать же в самом деле:
        */
        switch(color){
            case BLACK:{
                Color = color;
                break;
            }
            case WHITE:{
                Color = color;
                break;   
            }
            default:
            break;
 
        }
    }
 
private:
    int Color;
};
А если перечисление из десятка элементов состоит?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2014, 20:06     Можно ли узнать, что в функцию передается именно элемент перечисления?
Посмотрите здесь:

C++ Передается только нулевой элемент массива
в функцию передается два строковых указателя C++
C++ на что можно заменить функцию?
C++ Не передается массив в функцию
C++ WinAPI Что можно узнать по hWnd о контроле?
C++ в функцию передается параметр const int *
Зачем в функцию main передается void? C++
Можно ли как-то узнать, что программа была перенесена с одного компьютера на другой C++
C++ Разработайте функцию, в которую передается массив типа char
C++ Почему в функцию передается другая переменная?
C++ Разработать функцию, в которую передается массив типа float, что возвращает сумму элементов массива в диапазон
C++ Массив не передается в функцию

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
01.08.2014, 20:17     Можно ли узнать, что в функцию передается именно элемент перечисления? #2
Иванов_Андрей, если они там по порядку, то можно привести к int и сравнить диапазоны. Можно использовать enum class из Си++11, тогда компилятор не даст использовать голый int и что-то кроме членов перечисления.
Иванов_Андрей
10 / 10 / 0
Регистрация: 23.07.2014
Сообщений: 52
01.08.2014, 20:19  [ТС]     Можно ли узнать, что в функцию передается именно элемент перечисления? #3
CyberSolver, это абстрактный пример, там немного сложнее все, меня интересует сама структура подобной конструкции.
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
01.08.2014, 20:23     Можно ли узнать, что в функцию передается именно элемент перечисления? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Иванов_Андрей, я вас не понял. Вам надо отследить, чтобы никто не передал методу setColor что-то кроме членов перечисления. Если они подряд - можно использовать проверку диапазона. Если нет - только switch-case по всем. Если использовать enum classes, то код слегка перепишется.
Иванов_Андрей
10 / 10 / 0
Регистрация: 23.07.2014
Сообщений: 52
01.08.2014, 20:29  [ТС]     Можно ли узнать, что в функцию передается именно элемент перечисления? #5
Цитата Сообщение от CyberSolver Посмотреть сообщение
Вам надо отследить, чтобы никто не передал методу setColor что-то кроме членов перечисления.
угу, именно это мне и нужно, а с проверкой диапазона - хорошая идея, перечисление то я сам создаю, спасибо.
krv
72 / 52 / 11
Регистрация: 10.07.2014
Сообщений: 328
04.08.2014, 11:00     Можно ли узнать, что в функцию передается именно элемент перечисления? #6
Цитата Сообщение от Иванов_Андрей Посмотреть сообщение
с проверкой диапазона - хорошая идея, перечисление то я сам создаю, спасибо.
Только реализуй что-то типа функций low и high для перечисления, чтобы при его модификации не перебирать весь код.
Yandex
Объявления
04.08.2014, 11:00     Можно ли узнать, что в функцию передается именно элемент перечисления?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru