在我的項目中,我使用了多個枚舉類,我需要根據需要使用它們輕鬆地進行轉換。他們基本上描述相同的事物,但命名不同,以使代碼更容易處理。下面是枚舉類:爲枚舉類重載轉換運算符
enum class tetroType {
None, I, O, T, J, L, S, Z
};
enum class gridBlock {
Empty, Blue, Green, Orange, Purple, Red, Teal, Yellow
};
在tetroType每個值對應於網格塊的值(FE tetroType :: I =網格塊:: TEAL),但所述第一保持關於tetronimo的形狀的信息(在tetronimo類),第二個保存塊的顏色信息(在網格類中)。我知道我可以使用一個枚舉,但這樣你就不會丟失任何信息。如果可能的話,我也需要將它轉換成字符串。這是我想如何使用它:
gridBlock grid = (gridBlock)tetroType::I;
string texture = (string)grid;
現在,我已經設置它的方式是這樣的。我使用這個開關的,每當我需要一個枚舉轉換爲另一種或成字符串其他方法中間:
switch (type) {
case tetroType::I:
block = gridBlock::Teal;
break;
case tetroType::O:
block = gridBlock::Yellow;
break;
case tetroType::T:
block = gridBlock::Purple;
break;
case tetroType::J:
block = gridBlock::Blue;
break;
case tetroType::L:
block = gridBlock::Orange;
break;
case tetroType::S:
block = gridBlock::Green;
break;
case tetroType::Z:
block = gridBlock::Red;
break;
case tetroType::None:
block = gridBlock::Empty;
}
鑄造不應該「輕鬆」完成。它*應該*是詳細和明確的,這樣你就不會過於寬鬆地施放。必須編寫'gridBlock grid = toGridBlock(tetroType :: I)'和'string texture = toString(grid);''是一件好事*。 –
我一直在尋找最優雅和正確的方式來做到這一點,我已經有了將一個轉換爲另一個的功能,但我不確定這是否是正確的方式。此外,該功能應該在哪裏?它應該在頭文件中與枚舉聲明一起使用嗎?這就是爲什麼我認爲如果可能的話,演員將是最優雅的解決方案。 –
這是基於意見的,但個人而言,我更喜歡在自己的頭文件中使用轉換函數,所以我只需要在需要時包含它們。再次,標準庫本身不(總是)這樣做。例如,''包含'std :: string' *和*各種'std :: to_string'函數。 –