C++11——可变参数模板
2023-12-17 21:18:31
可变参数模板可以接收不定数量的参数,比如printf函数就是这样,可以传任意数量的参数
template<class ...Args>
void test(Args... args)
{
//...
}
Args是一个函数模板参数包,args函数形参参数包
如何获取参数包的值
1.递归获取
void _test()
{
cout << endl;
}
template<class T, class ...Args>
void _test(T val, Args... args)
{
cout << val << ' ';
_test(args...);
}
template<class ...Args>
void test(Args... args)
{
_test(args...);
}
int main() {
test(1, 2, 3, "acb");
return 0;
}
2.逗号表达式展开获取
template<class T>
void test(T t)
{
cout << t << ' ';
}
template<class ...Args>
void getg(Args... args)
{
int arr[] = { (test(args), 0)... };
cout << endl;
}
int main() {
getg(1, 2, 3, "acb");
return 0;
}
应用
STL容器中的emplace和emplace_back就是可变参数,相较于push_back使用时需要传入类对象,emplace_back可以直接传 类的构造函数的参数
int main() {
std::map<int, const char*> m;
m.insert(make_pair(1, "a"));
m.emplace(2, "b");
for (auto e : m)
{
cout << e.first << ' ' << e.second << endl;
}
}
文章来源:https://blog.csdn.net/weixin_74269833/article/details/135047191
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!