2010-06-22 41 views
2

基本上,我有一個鏈接列表,它實現了一個display()函數,它可以簡單地遍歷元素並打印出它們的值。如何在函數中使用Enum和字符串?

我想做這樣的:

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

編譯器立刻抱怨。我的老師說這是因爲字符串在編譯時不知道,導致錯誤。這個解釋聽起來有點過分,但他建議我使用枚舉。所以我研究了它,它說顯式字符串枚舉不起作用。像

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

然後,我真的不知道。

enum type是List類的一部分,以及函數display()。這再次看起來像一個非常糟糕的解決方案。不過,我想知道這種方法是否可行。

我怎麼能設置在主函數枚舉在同一時間我開通來電顯示()?像這樣

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

當然,更容易的方法是非常受歡迎的。一般來說,如果可能的話,我該如何聲明/傳遞枚舉函數?

回答

2

在當前的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
class List 
{ 
    enum Type 
    { 
     HORIZONTAL, 
     VERTICAL 
    }; 

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

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

這是巫術!很酷,不知道你可以這樣做。謝謝! – IAE 2010-06-22 16:22:38

+0

'Type'是否需要公開才能用作'display'的參數? – 2010-06-22 16:26:25

+0

不,它不會,但如果你把它變成私人的,你不能在'main'中訪問它,因此你不能從那裏調用'display'。 – Job 2010-06-22 16:28:21

相關問題