在现代 C++ 中,如何在没有宏的情况下实现系统特定的功能
How can I implement system-specific functions without macros in modern C++
JetBrains ReSharper for C++ 告诉我要替换类似
的东西
#ifdef _WIN32
# define cls system("cls")
#else // Assuming Unix
# define cls system("tput clear")
#endif // _WIN32
使用 constexpr 模板函数。
但是,我尝试通过 std::enable_if_t<_WIN32>
使用 SFINAE,但我收到错误提示 "cannot overload functions distinguished by return type alone"(诚然,我没有使用模板函数,而是使用 enable_if
对于 return 类型)。
除了使用 enable_if
作为 return 类型外,我不知道如何使用 constexpr 模板函数来实现预处理器的功能。
从更一般的意义上讲,我希望能够基于不依赖于其他模板参数的编译时布尔值启用函数重载。
提前致谢!
你不需要enable_if
,这是为了你可能需要在编译时根据类型参数等做出决定的情况
预处理器在这里很合适,尽管使用普通函数可能比使用宏更干净。
#ifdef _WIN32
void cls() { system("cls"); }
#else // Assuming Unix
void cls() { system("tput clear"); }
#endif // _WIN32
JetBrains ReSharper for C++ 告诉我要替换类似
的东西#ifdef _WIN32
# define cls system("cls")
#else // Assuming Unix
# define cls system("tput clear")
#endif // _WIN32
使用 constexpr 模板函数。
但是,我尝试通过 std::enable_if_t<_WIN32>
使用 SFINAE,但我收到错误提示 "cannot overload functions distinguished by return type alone"(诚然,我没有使用模板函数,而是使用 enable_if
对于 return 类型)。
除了使用 enable_if
作为 return 类型外,我不知道如何使用 constexpr 模板函数来实现预处理器的功能。
从更一般的意义上讲,我希望能够基于不依赖于其他模板参数的编译时布尔值启用函数重载。
提前致谢!
你不需要enable_if
,这是为了你可能需要在编译时根据类型参数等做出决定的情况
预处理器在这里很合适,尽管使用普通函数可能比使用宏更干净。
#ifdef _WIN32
void cls() { system("cls"); }
#else // Assuming Unix
void cls() { system("tput clear"); }
#endif // _WIN32