可变模板是类或函数 模板 ,可以接受任何变量(零个或多个)数量的参数。在C++中,模板只能有固定数量的参数,这些参数必须在声明时指定。然而,可变模板有助于克服这个问题。Douglas Gregor和JakkJ.J.RVVI提出了C++的这个特性。
可变参数与 阵列 在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主页上,并帮助其他极客。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。