如何在函数中使用带有字符串的Enum?

时间:2010-06-22 16:15:02

标签: c++ string class enums

基本上,我有一个链接列表,它实现了一个display()函数,它只是循环遍历元素并打印出它们的值。

我想这样做:

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

编译器立即抱怨。我的老师说这是因为字符串在编译时是未知的,导致错误。这个解释听起来有些不确定,但他建议我使用枚举。所以我研究了它,它说明确的字符串到枚举不起作用。像

这样的东西
class List
{
    enum type 
    {
        HORIZONTAL = "inline"
        VERTICAL   = "normal"
    }

然后,我真的不知道。

enum type是List类的一部分,以及函数display()。这看起来像一个非常糟糕的解决方案。不过,我想知道这种方法是否可行。

如何在调用display()的同时在main函数中设置枚举?像这样

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

当然,非常欢迎更简单的方法。一般来说,如果可能的话,如何向函数声明/传递枚举?

2 个答案:

答案 0 :(得分:2)

class List
{
    enum Type
    {
        HORIZONTAL,
        VERTICAL
    };

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

int main()
{
    List l;
    l.display(List::HORIZONTAL);
}

答案 1 :(得分:2)

在当前的C ++中,Switch仅适用于整数类型。您可以定义枚举,打开它,并编写一个辅助函数,在需要时将枚举映射到字符串值。

实施例

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;
  }
}