当前位置: 首页 > 工具软件 > List Template > 使用案例 >

模板template中的list参数

武骁
2023-12-01

有时候模板参数可以把几个类型的列表看成单一的模板实参,并用这一单一的实参进行传递。 有两个作用:

  1. 声明一个参数不固定的函数;
  2. 定义一种具有成员个数不固定的类型结构。
#include <iostream>

void tprintf(const char* format) // base function
{
    std::cout << format;
}

template<typename T, typename... Targs> //typename不可省略
void tprintf(const char* format, T value, Targs... Fargs) // recursive variadic function
{
    //std::cout << "|format:" << format << "...|value:" << value << "|size of Fargs:" << sizeof...(Fargs) << std::endl;

    for ( ; *format != '\0'; format++ ) {
        if ( *format == '%' ) {
           std::cout << value;
           //std::cout << std::endl;
           tprintf(format+1, Fargs...); // recursive call, value不再作为参数传递, 自动取Fargs的第一个参数给形参value
           return;
        }
        std::cout << *format;
    }
}

int main()
{
    tprintf("% world% %! fuck,%!\n","Hello",'!',123,"get it");//把%看做%s、%d就好理解了
    return 0;
}
//Hello world! 123! fuck,get it!
 类似资料: