C++11——可变参数模板

可变参数模板可以接收不定数量的参数,比如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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值