在现代C+;中,如果没有宏,如何实现特定于系统的功能+; < C++ > JeTraveReSalpPr让我替换一些类似的东西 \ifdef\u WIN32 #定义cls系统(“cls”) #else//Unix #定义cls系统(“tput清除”) #endif/\u WIN32
使用constexpr模板函数 然而,我曾尝试通过在现代C+;中,如果没有宏,如何实现特定于系统的功能+; < C++ > JeTraveReSalpPr让我替换一些类似的东西 \ifdef\u WIN32 #定义cls系统(“cls”) #else//Unix #定义cls系统(“tput清除”) #endif/\u WIN32,c++,templates,sfinae,preprocessor,compile-time,C++,Templates,Sfinae,Preprocessor,Compile Time,使用constexpr模板函数 然而,我曾尝试通过std::enable_if_t使用SFINAE,但我收到的错误是“不能单独重载按返回类型区分的函数”(诚然,我没有使用模板函数,而是对返回类型使用enable_if) 除了使用enable\u if作为返回类型外,我不知道如何使用constexpr模板函数来实现预处理器的功能 在更一般的意义上,我希望能够基于编译时布尔函数启用函数重载,而不依赖于其他模板参数 提前谢谢 您不希望启用\u if,这适用于您可能需要在编译时根据类型参数等做出决策的情
std::enable_if_t
使用SFINAE,但我收到的错误是“不能单独重载按返回类型区分的函数”(诚然,我没有使用模板函数,而是对返回类型使用enable_if
)
除了使用enable\u if
作为返回类型外,我不知道如何使用constexpr模板函数来实现预处理器的功能
在更一般的意义上,我希望能够基于编译时布尔函数启用函数重载,而不依赖于其他模板参数
提前谢谢 您不希望
启用\u if
,这适用于您可能需要在编译时根据类型参数等做出决策的情况
预处理器在这里是合适的,尽管使用普通函数可能比使用宏更干净
\ifdef\u WIN32
void cls(){system(“cls”);}
#else//Unix
void cls(){system(“tput clear”);}
#endif/\u WIN32
我会在函数中移动预处理器位,这样你就知道每个变量都有完全相同的签名。void cls(){#ifdef_WIN32 system(“cls”);#else system(“tput clear”);#endif}
另一种可能性,如果你有足够的这些东西让它值得一试,就是将win32和unix内容移动到不同的文件中,并且只将构建脚本安排为仅链接到适合目标系统的文件中。