C++中的函数函数模板

可变模板是类或函数 模板 ,可以接受任何变量(零个或多个)数量的参数。在C++中,模板只能有固定数量的参数,这些参数必须在声明时指定。然而,可变模板有助于克服这个问题。Douglas Gregor和JakkJ.J.RVVI提出了C++的这个特性。

null

可变参数与 阵列 在C++中。我们可以轻松地遍历参数,找到模板的大小(长度),可以通过索引访问值,也可以切片模板。

所以基本上,变量函数模板是可以接受多个参数的函数。

语法:

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

注: 参数必须放在角括号内。

下面是C++中的一个例子,展示如何使用一个可变函数模板:

CPP

// C++ program to demonstrate working of
// Variadic function Template
#include <iostream>
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." ;
}
// Variadic function Template that takes
// variable number of arguments and prints
// all of them.
template < typename T, typename ... Types>
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" );
return 0;
}


输出

123.14Pass me any number of argumentsI will printI am empty function and I am called at last.

记住这一点 编译器用实际函数替换模板 .

说明: 可变模板的工作原理如下:

声明, 打印(1,2,3.14,“将任意数量的参数传递给我”,“我将打印””); 按照以下方式进行评估:

首先,编译器将语句解析为

cout<< 1 <<endl ;print(2, 3.14, "Pass me any number of arguments",       "I will print");

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

cout<< 2 <<endl ;print(3.14, "Pass me any number of arguments",       "I will print");

同样,它被分解为以下形式:

cout<< 3.14 <<endl ;print("Pass me any number of arguments",       "I will print");
cout<< "Pass me any number of arguments" <<endl ;print("I will print");
cout<< "I will print" <<endl ;print();

现在,在这一点上,编译器搜索一个函数重载,它的匹配项是空函数,即没有参数的函数。这意味着所有具有1个或多个参数的函数都与可变模板匹配,所有没有参数的函数都与空函数匹配。

本文由 马扎尔·伊玛目·汗 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享