📜  C++中的可变参数函数模板

📅  最后修改于: 2021-05-30 15:05:26             🧑  作者: Mango

可变参数模板是采用可变数量的参数的模板。可变参数函数模板是可以使用多个参数的函数。

可变函数模板的语法::

template(typename arg, typename... args)
return_type function_name(arg var1, args... var2)

Note :, typename arg, typename... args must be
inside angular brackets. 

以下是C++中的示例,以显示如何使用可变参数函数模板:

// C++ program to demonstrate working of
// Variadic function Template
#include 
using namespace std;
  
// To handle base case of below recursive
// Variadic function Template
void print()
{
    cout << "I am empty function and "
            "I am called at last.\n" ;
}
  
// Variadic function Template that takes 
// variable number of arguments and prints
// all of them.
template 
void print(T var1, Types... var2)
{
    cout << var1 << endl ;
  
    print(var2...) ;
}
  
// Driver code
int main()
{
    print(1, 2, 3.14, "Pass me any "
              "number of arguments", 
                  "I will print\n");
  
    return 0;
}

输出:

1
2
3.14
Pass me any number of arguments
I will print

I am empty function and I am called at last.

请记住,编译器将模板替换为实际功能。

可变参数模板的工作方式如下:
语句print(1,2,3.14,“向我传递任意数量的参数”,“我将打印\ n”);通过以下方式进行评估:
首先,编译器将语句解析为

cout<< 1 <

现在,编译器找到一个可以接受这些参数的print()函数,结果再次以类似方式执行可变参数print()函数:

cout<< 2 <

再次将其解析为以下形式:
(*)

cout<< 3.14 <

(*)

cout<< "Pass me any number of arguments" <

(*)

cout<< "I will print\n" <

现在,在这一点上的函数重载,其匹配,即它没有参数的函数的空函数,编译器搜索。

这意味着,具有1个或多个参数的所有函数都与可变参数模板匹配,而没有参数的所有函数都与空函数匹配。

参考 :
http://www.cplusplus.com/articles/EhvU7k9E/

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”