字符數組我有在C++枚舉值作爲C++
enum color {
BLACK,GREEN,RED
};
在java中我可以接收使用color.BLACK.name()
會給我字符串值的字符串值枚舉..
做C++具有相同的行爲或如何將枚舉轉換爲char *。
字符數組我有在C++枚舉值作爲C++
enum color {
BLACK,GREEN,RED
};
在java中我可以接收使用color.BLACK.name()
會給我字符串值的字符串值枚舉..
做C++具有相同的行爲或如何將枚舉轉換爲char *。
簡答題沒有。儘管如此,您可以通過一些「慣用」宏伎倆來模仿效果。
原因在於C++傾向於讓你「支付你所需要的只有」(這使得如果你設計的話可以寫更多的性能代碼)。
對這個代碼項目有an article,google會出現很多其他的。
不久前,我做了一些技巧,有枚舉正確顯示在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對象中。
在該語言中沒有對此的直接支持。事實上, 將是困難的,如果不是不可能的,對於一般 情況下做的事:在C++ enum
僅具有 枚舉類型有限的關係,你可以寫的東西,如:
enum E
{
a = 0,
b = 0,
c = 0
};
,與幾個枚舉常量具有相同的值。
(我已經寫代碼解析枚舉語句,並且生成 映射代碼與字符串;給出一個枚舉如上述 ,它會爲0的枚舉值映射到"a"
,不管 它是否被設置爲a
,b
或c
它仍然是令人難以置信的 是有用的,但我認爲這是正確的解決方案:。外部 程序如果你需要或要求他們產生的映射)
簡短的回答沒有。儘管如此,您可以通過一些「慣用」宏伎倆來模仿效果。 – sehe 2013-03-07 07:29:47
@你可以解釋一下嗎? – Kathick 2013-03-07 07:30:43
在C++中,你不會問「如何將X轉換爲char *」,而是「如何爲X寫一個輸出流操作符」。使用該運算符,您可以流式處理字符串,stdout,stderr,以及文件... – juanchopanza 2013-03-07 07:33:10