2013-03-07 110 views
3

字符數組我有在C++枚舉值作爲C++

enum color { 
    BLACK,GREEN,RED 
}; 

在java中我可以接收使用color.BLACK.name()會給我字符串值的字符串值枚舉..

做C++具有相同的行爲或如何將枚舉轉換爲char *。

+1

簡短的回答沒有。儘管如此,您可以通過一些「慣用」宏伎倆來模仿效果。 – sehe 2013-03-07 07:29:47

+0

@你可以解釋一下嗎? – Kathick 2013-03-07 07:30:43

+0

在C++中,你不會問「如何將X轉換爲char *」,而是「如何爲X寫一個輸出流操作符」。使用該運算符,您可以流式處理字符串,stdout,stderr,以及文件... – juanchopanza 2013-03-07 07:33:10

回答

4

簡答題沒有。儘管如此,您可以通過一些「慣用」宏伎倆來模仿效果。

原因在於C++傾向於讓你「支付你所需要的只有」(這使得如果你設計的話可以寫更多的性能代碼)。

對這個代碼項目有an article,google會出現很多其他的。

1

不久前,我做了一些技巧,有枚舉正確顯示在QComboBox,並具有枚舉和字符串表示的定義爲一個語句

#pragma once 
#include <boost/unordered_map.hpp> 

namespace enumeration 
{ 

    struct enumerator_base : boost::noncopyable 
    { 
     typedef 
     boost::unordered_map<int, std::wstring> 
     kv_storage_t; 
     typedef 
     kv_storage_t::value_type 
     kv_type; 
     kv_storage_t const & kv() const 
     { 
     return storage_; 
     } 

     LPCWSTR name(int i) const 
     { 
     kv_storage_t::const_iterator it = storage_.find(i); 
     if(it != storage_.end()) 
      return it->second.c_str(); 
     return L"empty"; 
     } 

    protected: 
     kv_storage_t storage_; 
    }; 

    template<class T> 
    struct enumerator; 

    template<class D> 
    struct enum_singleton : enumerator_base 
    { 
     static enumerator_base const & instance() 
     { 
     static D inst; 
     return inst; 
     } 
    }; 
} 

#define QENUM_ENTRY(K, V, N) K, N storage_.insert(std::make_pair((int)K, V)); 

#define QBEGIN_ENUM(NAME, C) \ 
enum NAME      \ 
{        \ 
    C       \ 
}        \ 
};       \ 
}        \ 

#define QEND_ENUM(NAME) \ 
};      \ 
namespace enumeration \ 
{      \ 
template<>    \ 
struct enumerator<NAME>\ 
    : enum_singleton< enumerator<NAME> >\ 
{      \ 
    enumerator()  \ 
    { 

//usage 
/* 
QBEGIN_ENUM(test_t, 
    QENUM_ENTRY(test_entry_1, L"number uno", 
    QENUM_ENTRY(test_entry_2, L"number dos", 
    QENUM_ENTRY(test_entry_3, L"number tres", 
QEND_ENUM(test_t))))) 
*/ 

現在你已經得到enumeration::enum_singleton<your_enum>::instance()能枚舉轉換爲字符串。如果您用boost::bimap替換kv_storage_t,您也可以進行反向轉換。 因爲Qt對象不能成爲模板,因此引入了轉換器的通用基類以將其存儲在Qt對象中。

0

在該語言中沒有對此的直接支持。事實上, 將是困難的,如果不是不可能的,對於一般 情況下做的事:在C++ enum僅具有 枚舉類型有限的關係,你可以寫的東西,如:

enum E 
{ 
    a = 0, 
    b = 0, 
    c = 0 
}; 

,與幾個枚舉常量具有相同的值。

(我已經寫代碼解析枚舉語句,並且生成 映射代碼與字符串;給出一個枚舉如上述 ,它會爲0的枚舉值映射到"a",不管 它是否被設置爲abc它仍然是令人難以置信的 是有用的,但我認爲這是正確的解決方案:。外部 程序如果你需要或要求他們產生的映射)