Как использовать Enum со строками в функции? - PullRequest
2 голосов
/ 22 июня 2010

По сути, у меня есть связанный список, который реализует функцию display(), которая просто перебирает элементы и выводит их значения.

Я хотел сделать это так:

void List::display( std::string type )
{
    switch(type)
    {
      // Do stuff...

Компилятор сразу пожаловался. Мой учитель сказал, что это происходит потому, что строка не известна во время компиляции, что приводит к ошибке. Это объяснение звучит немного сомнительно, но он предложил мне использовать перечисления. Итак, я исследовал его, и он говорит, что явная строка для перечислений не работает. Что-то вроде

class List
{
    enum type 
    {
        HORIZONTAL = "inline"
        VERTICAL   = "normal"
    }

а потом я действительно не знаю.

enum type является частью класса List, а также функции display(). Это снова выглядит как действительно дрянное решение. Тем не менее, я хочу знать, возможен ли такой подход.

Как я могу установить enum в основной функции в то же время, когда я вызываю display ()? Вот так

int main( void )
{
    display("normal");

Конечно, более простые подходы приветствуются. В общем, как я могу объявить / передать перечисление в функцию, если это возможно?

Ответы [ 2 ]

2 голосов
/ 22 июня 2010

Переключатель в текущем C ++ работает только с целочисленными типами. Вы можете определить свое перечисление, включить его и написать вспомогательную функцию, которая отображает перечисление в строковые значения, если это необходимо.

Пример

enum E { A, B };

string E_to_string( E e )
{
  switch(e)
  {
    case A: return "apple";
    case B: return "banana";
  }
}

void display( E e )
{
  std::cout << "displaying an " << E_to_string(e) << std::endl;
  switch(e)
  {
    case A: // stuff displaying A;
    case B: // stuff displaying B;
  }
}
2 голосов
/ 22 июня 2010
class List
{
    enum Type
    {
        HORIZONTAL,
        VERTICAL
    };

    void display(Type type)
    {
        switch (type)
        {
            //do stuff
        }
    }
};

int main()
{
    List l;
    l.display(List::HORIZONTAL);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...