#undef NDEBUG #include "Utils.hpp" #include #include #include #include #include std::locale utf8loc(std::locale(), new std::codecvt_utf8); using namespace Utils; using namespace std; enum class CompassPoint { NORTH, EAST, SOUTH, WEST }; wstring to_wstring(CompassPoint e ) { static const map m = { {0, L"NORTH"}, {1, L"EAST"}, {2, L"SOUTH"}, {3, L"WEST"} }; return m.at(static_cast(e)); } wostream &operator<<(wostream& os, CompassPoint e ) { return os << to_wstring(e); } wstring compass_point_to_string(CompassPoint const c) noexcept { const wchar_t* 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 turn_right(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: " << to_wstring(cp1) << endl; wcout << L"SOUTH: " << compass_point_to_string(CompassPoint::SOUTH) << endl; wcout << L"turnRight(cp1): " << compass_point_to_string(turn_right(cp1)) << endl; CompassPoint const 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; }