MST

星途 面试题库

面试题:C++函数模板类型参数复杂约束与元编程

编写一个C++函数模板,模板参数T要求满足:T必须是一个类类型,且该类必须有一个名为print的成员函数,该成员函数无参数且返回void。函数模板功能是调用传入对象的print函数。请使用C++元编程技术实现该约束。
22.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <type_traits>

// 定义一个辅助模板,用于检测类是否有print成员函数
template<typename T, typename = void>
struct has_print_member : std::false_type {};

template<typename T>
struct has_print_member<T, std::void_t<decltype(std::declval<T>().print())>> : std::true_type {};

// 函数模板,使用元编程约束T
template<typename T, typename = std::enable_if_t<has_print_member<T>::value>>
void call_print(T& obj) {
    obj.print();
}