MST

星途 面试题库

面试题:C++函数模板实例化条件控制之高级难度

有一个函数模板 `template <typename T> void processData(T data)`,要求只有当 `T` 是整数类型(`std::is_integral` 为真)且数据值大于10时才实例化该函数模板。请通过元编程技术实现这一条件控制,并写出完整代码。
26.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

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

template <typename T, typename = std::enable_if_t<std::is_integral<T>::value && std::is_signed<T>::value && std::is_floating_point<T>::value == false>>
void processData(T data) {
    if (data > 10) {
        std::cout << "Processing integral data greater than 10: " << data << std::endl;
    }
}

int main() {
    processData(15);
    // processData(5);  // 不会实例化,因为不满足 data > 10
    // processData(10.5);  // 不会实例化,因为不是整数类型
    return 0;
}

上述代码通过 std::enable_if 实现了只有当 T 是整数类型且数据值大于10时才实例化 processData 函数模板。std::enable_if 的第一个参数是一个条件,当条件为真时,第二个模板参数才会被推导,否则函数模板不会被实例化。

main 函数中,调用 processData(15) 会成功实例化并执行函数体,而 processData(5)processData(10.5) 由于不满足条件不会实例化函数模板。