MST
星途 面试题库

面试题:C++ 中 SFINAE 在简单模板元编程场景的应用

请编写一个C++模板函数,利用SFINAE技术实现当传入类型为整数时返回其平方,当传入类型为浮点数时返回其平方根。若传入其他类型,该模板函数应在编译期被禁用。
47.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <type_traits>
#include <cmath>

// 主模板,禁用其他类型
template<typename T, typename = std::enable_if_t<!(std::is_integral<T>::value || std::is_floating_point<T>::value)>>
void func(T) = delete;

// 整数特化,返回平方
template<typename T>
typename std::enable_if_t<std::is_integral<T>::value, T>
func(T num) {
    return num * num;
}

// 浮点数特化,返回平方根
template<typename T>
typename std::enable_if_t<std::is_floating_point<T>::value, T>
func(T num) {
    return std::sqrt(num);
}