2015-06-24 62 views
-1

假設我們枚舉了執行operator<<將枚舉值轉換爲字符串。是否可以在字符串建造或類似的事情中調用這個操作符?我目前的方法使用std::stringstream在枚舉上調用< <,並從std::stringstream中提取字符串。有沒有其他方法?使用std::cout <<不是一個選項。調用枚舉<<字符串組合的運算符

示例代碼:

enum class Status { 
    OK, 
    ERROR 
} 

::std::ostream& operator<<(::std::ostream& os, Status status) 
{ 
    switch (status) { 
     case Status::OK: 
      return os << "OK"; 
     case Status::ERROR: 
      return os << "ERROR"; 
} 

用法:

Status s = Status::OK; 
std::stringstream stream; 
stream << s; 
std::string statusString = s.str().c_str(); 
+0

你總是可以做一個'std :: map',那麼你可以用它來檢索字符串並定義你的'operator <<'如果你想'std :: map statuses { {Status :: OK,「OK」},{Status :: ERROR,「ERROR」}};' – CoryKramer

+0

[enum to C++ in modern C++ and future C++ 17](http://stackoverflow.com/questions/28828957/enum-to-string-in-modern-c-and-future-c17) –

+1

你錯過了默認情況,但你做得很好。或與std ::訣竅 –

回答

0

不幸的是,這裏沒有任何優雅的解決方案,只要你想。

如果我們可以,我們可以使用用戶定義的轉換,但它需要是一個非靜態成員函數,這是enums不可能的。

但是,您可能總是使用與您的operator<<一樣的參數相關查找。

或者,如果你想要字符串,建立一個地圖,並把所需的字符串相當於那裏。

+0

那麼令人失望,我剛剛贏得downvovte作爲獎勵rofl:D – krizajb