Ildar Asked:2022-01-04 19:58:07 +0000 UTC2022-01-04 19:58:07 +0000 UTC 2022-01-04 19:58:07 +0000 UTC 如何为基本类型定义一种模板特化,为自定义类型定义另一种模板特化 772 我需要该函数在将基本类型传递给它时执行一个代码,而在传递自定义类型时,行为是不同的。我读过std::is_fundamental它,但它已经在代码中被调用,如果我做这样的检查,我的函数将不会编译,因为模板函数包含对简单类型没有的方法的调用,如何在实例化过程中直接确定? c++ 1 个回答 Voted Best Answer KoVadim 2022-01-04T20:21:55Z2022-01-04T20:21:55Z 如果编译器支持第 17 标准,那么只需 #include <iostream> #include <type_traits> using namespace std; template<typename T> void show(T t) { if constexpr(std::is_fundamental<T>::value) { std::cout << "fund\n"; } else { std::cout << "non\n"; } } int main() { show(1); std::string s; show(s); } 如果编译器更旧(更古老),那么你可以去这样的地方(google SFINAE) template<typename T> typename std::enable_if<std::is_fundamental<T>::value>::type show(T t) { std::cout << "fund\n"; } template<typename T> typename std::enable_if<!std::is_fundamental<T>::value>::type show(T t) { std::cout << "non\n"; }
如果编译器支持第 17 标准,那么只需
如果编译器更旧(更古老),那么你可以去这样的地方(google SFINAE)