Как я могу реализовать системные c функции без макросов в современном C ++ - PullRequest
2 голосов
/ 14 января 2020

JetBrains ReSharper для C ++ сказал мне заменить что-то вроде

#ifdef _WIN32
#    define cls system("cls")
#else // Assuming Unix
#    define cls system("tput clear")
#endif // _WIN32

шаблонными функциями constexpr.

Тем не менее, я пытался использовать SFINAE через std::enable_if_t<_WIN32>, но я получаю сообщения о том, что «не могу перегрузить функции, отличающиеся только типом возврата» (правда, я не использовал функцию шаблона, а вместо этого использовал enable_if для типа возврата).

Помимо использования enable_if в качестве возвращаемого типа, я не знаю, как использовать шаблонные функции constexpr для реализации того, что будет делать препроцессор.

В более общем смысле, я бы хотел чтобы иметь возможность включать перегрузки функций на основе логических значений времени компиляции, которые не зависят от других параметров шаблона.

Заранее спасибо!

1 Ответ

3 голосов
/ 14 января 2020

Вы не хотите enable_if, что для случаев, когда вам может потребоваться принимать решения во время компиляции на основе параметров типа, и т. Д. c.

Препроцессор здесь уместен, хотя и может быть чище использовать обычные функции, чем макросы.

#ifdef _WIN32
void cls() { system("cls"); }
#else // Assuming Unix
void cls() { system("tput clear"); }
#endif // _WIN32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...