Enumerations
This page is under construction. Please come back later.
#include "Utils.hpp" #include <clocale> #include <codecvt> #include <iostream> #include <string> std::locale utf8loc(std::locale(), new std::codecvt_utf8<wchar_t>); using namespace std; enum class CompassPoint { NORTH, EAST, SOUTH, WEST }; wstring CompassPointToString(CompassPoint const c) noexcept { wstring result = L""; switch (c) { case CompassPoint::NORTH: result = L"North"; break; case CompassPoint::EAST: result = L"East"; break; case CompassPoint::SOUTH: result = L"South"; break; case CompassPoint::WEST: result = L"West"; break; } return result; } CompassPoint turnRight(CompassPoint const c) noexcept { if (c == CompassPoint::NORTH) { return CompassPoint::EAST; } else if (c == CompassPoint::EAST) { return CompassPoint::SOUTH; } else if (c == CompassPoint::SOUTH) { return CompassPoint::WEST; } else { return CompassPoint::NORTH; } } int main(int argc, char **argv) { setlocale(LC_ALL, "en_US.UTF-8"); wcout.imbue(utf8loc); wcin.imbue(utf8loc); CompassPoint cp1 = CompassPoint::NORTH; wcout << L"cp1: " << Utils::enum_to_wstring(cp1) << endl; wcout << L"SOUTH: " << CompassPointToString(CompassPoint::SOUTH) << endl; wcout << L"turnRight(cp1): " << CompassPointToString(turnRight(cp1)) << endl; CompassPoint cp2 = CompassPoint::EAST; if (cp1 == cp2) { wcout << L"cp1 == cp2" << endl; } else { wcout << L"cp1 != cp2" << endl; } cp1 = cp2; if (cp1 == cp2) { wcout << L"cp1 == cp2" << endl; } else { wcout << L"cp1 != cp2" << endl; } return 0; }
Output
$ g++ -std=c++17 Enums1.cpp -o Enums1 -lfmt
$ ./Enums1
cp1: 0
SOUTH: South
turnRight(cp1): East
cp1 != cp2
cp1 == cp2
#include "Utils.hpp" #include <clocale> #include <codecvt> #include <iostream> #include <string> std::locale utf8loc(std::locale(), new std::codecvt_utf8<wchar_t>); using namespace std; enum class Color { RED = 1, GREEN = 2, YELLOW = 3, BLUE = 4, MAGENTA = 5, CYAN = 6 }; Color combineColors(Color const c1, Color const c2) noexcept { int const i1 = static_cast<int>(c1); int const i2 = static_cast<int>(c2); int const result = i1 | i2; Color const returnColor = static_cast<Color>(result); return returnColor; } int main(int argc, char **argv) { setlocale(LC_ALL, "en_US.UTF-8"); wcout.imbue(utf8loc); wcin.imbue(utf8loc); Color c1 = Color::BLUE; wcout << L"c1: " << Utils::enum_to_wstring(c1) << endl; wcout << L"RED: " << Utils::enum_to_wstring(Color::RED) << endl; wcout << L"combineColors(c1, RED): " << Utils::enum_to_wstring(combineColors(c1, Color::RED)) << endl; Color c2 = Color::GREEN; wcout << L"combineColors(c1, c2): " << Utils::enum_to_wstring(combineColors(c1, c2)) << endl; if (c1 == c2) { wcout << L"c1 == c2" << endl; } else { wcout << L"c1 != c2" << endl; } c1 = c2; if (c1 == c2) { wcout << L"c1 == c2" << endl; } else { wcout << L"c1 != c2" << endl; } Color bad = static_cast<Color>(7); wcout << L"bad: " << Utils::enum_to_wstring(bad) << endl; return 0; }
Output
$ g++ -std=c++17 Enums2.cpp -o Enums2 -lfmt
$ ./Enums2
c1: 4
RED: 1
combineColors(c1, RED): 5
combineColors(c1, c2): 6
c1 != c2
c1 == c2
bad: 7
Questions
- {{Who's on first?}}
- {{Who's on second?}}
- {{Who's on third?}}
Projects
More ★'s indicate higher difficulty level.
References
-
[[C++ Programming Language]], 4th Edition, Bjarne Stroustrup, Addison-Wesley, 2013, ISBN 978-0321563842.
- [[C++ Language Reference]]
- [[cplusplus.com]]
- [[Cprogramming.com]]