面试题答案
一键面试#include <iostream>
#include <type_traits>
#include <typeinfo>
template <typename T, typename... Args>
void printArgs(T arg, Args... args) {
std::cout << "Type: " << typeid(arg).name() << ", Value: " << arg << std::endl;
printArgs(args...);
}
template <typename T>
void printArgs(T arg) {
std::cout << "Type: " << typeid(arg).name() << ", Value: " << arg << std::endl;
}
你可以这样调用函数:
int main() {
printArgs(1, 'a', 3.14);
return 0;
}
- 模板函数
printArgs
的递归定义:- 第一个模板函数
printArgs(T arg, Args... args)
是递归的主体部分,它接收一个参数arg
和可变参数包args
。它打印出当前参数arg
的类型和值,然后递归调用printArgs
处理可变参数包args
。 - 第二个模板函数
printArgs(T arg)
是递归的终止条件,当可变参数包args
为空时,这个函数会被调用,它只打印最后一个参数arg
的类型和值。
- 第一个模板函数
typeid
获取类型信息:typeid(arg).name()
用于获取参数arg
的类型名称。main
函数:在main
函数中,调用printArgs
并传入不同类型的参数,测试函数功能。