Вот не нужно писать кроссплатформенный код вот так:
enum class status { not_started, started, shutting_down, stopped }; #if defined(PLATFORM_WINDOWS) [[nodiscard]] const wchar_t * to_str(status st) noexcept { switch(st) { case status::not_started: return L"not_started"; case status::started: return L"started"; case status::shutting_down: return L"shutting_down"; case status::stopped: return L"stopped"; } } #else [[nodiscard]] const char * to_str(status st) noexcept { switch(st) { case status::not_started: return "not_started"; case status::started: return "started"; case status::shutting_down: return "shutting_down"; case status::stopped: return "stopped"; } } #endif |
вот не надо, пожалуйста.
Прямой путь к излишнему траху когда в одном месте что-то поправили, а на другой платформе толком не протестировали. И вопрос не в том, наступите ли вы на эти грабли или нет. Наступите. Проверенно неоднократно. Так что вопрос лишь в том когда именно наступите.
Сделайте хотя бы так:
// Эта кухня должна жить в отдельном заголовочном файле. #if defined(PLATFORM_WINDOWS) using platform_char_type = wchar_t; #define STRING_LITERAL(str) L##str #else using platform_char_type = char; #define STRING_LITERAL(str) str #endif enum class status { not_started, started, shutting_down, stopped }; [[nodiscard]] const platform_char_type * to_str(status st) noexcept { switch(st) { case status::not_started: return STRING_LITERAL("not_started"); case status::started: return STRING_LITERAL("started"); case status::shutting_down: return STRING_LITERAL("shutting_down"); case status::stopped: return STRING_LITERAL("stopped"); } } |
Комментариев нет:
Отправить комментарий