Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在现代C+;中,如果没有宏,如何实现特定于系统的功能+; < C++ > JeTraveReSalpPr让我替换一些类似的东西 \ifdef\u WIN32 #定义cls系统(“cls”) #else//Unix #定义cls系统(“tput清除”) #endif/\u WIN32_C++_Templates_Sfinae_Preprocessor_Compile Time - Fatal编程技术网

在现代C+;中,如果没有宏,如何实现特定于系统的功能+; < C++ > JeTraveReSalpPr让我替换一些类似的东西 \ifdef\u WIN32 #定义cls系统(“cls”) #else//Unix #定义cls系统(“tput清除”) #endif/\u WIN32

在现代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,这适用于您可能需要在编译时根据类型参数等做出决策的情

使用constexpr模板函数

然而,我曾尝试通过
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内容移动到不同的文件中,并且只将构建脚本安排为仅链接到适合目标系统的文件中。