MST

星途 面试题库

面试题:C++可变参数模板多类型参数的基础应用

请实现一个C++函数,使用可变参数模板接收任意数量不同类型的参数,并打印出每个参数的类型和值。例如传入1, 'a', 3.14,函数应打印出参数类型及对应值。
39.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#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;
}
  1. 模板函数printArgs的递归定义
    • 第一个模板函数printArgs(T arg, Args... args)是递归的主体部分,它接收一个参数arg和可变参数包args。它打印出当前参数arg的类型和值,然后递归调用printArgs处理可变参数包args
    • 第二个模板函数printArgs(T arg)是递归的终止条件,当可变参数包args为空时,这个函数会被调用,它只打印最后一个参数arg的类型和值。
  2. typeid获取类型信息typeid(arg).name()用于获取参数arg的类型名称。
  3. main函数:在main函数中,调用printArgs并传入不同类型的参数,测试函数功能。