C++ 完美转发

文章介绍了C++中如何利用泛型和std::forward实现类型自动匹配,以及结合可变参数模板实现任意类型和参数数量的函数调用。示例代码展示了如何将泛型方法转发到已定义的特定类型函数上,以及如何在可变参数模板中应用这一概念。
摘要由CSDN通过智能技术生成

听上去比较高端的技术,而且曾作为面试题,这个功能实际上是让泛型自动匹配具体类型,代码:

1.常规案例

#include <iostream>
#include "stdio.h"

using namespace std;

void Foo(int a) { cout << "int variable!" << endl; }
void Foo(float a) { cout << "float variable!" << endl; }

template <typename T>
void Foo(T a)
{
    Foo(std::forward<T>(a));
}

int main()
{
    Foo(12);
    Foo(12.5f);
}

可以看见通过std:forward,可以将泛型方法跳转至已经
写好对应类型的方法上。

2.配合可变参数模板使用

配合可变参数模板后可以做到任意类型+任意参数数量的匹配,代码如下:

#include <iostream>
#include "stdio.h"

using namespace std;

void Foo(int a, int b) { cout << "int 2variable!" << endl; }
void Foo(float a) { cout << "float variable!" << endl; }

template <class... T>
void Foo(T... a)
{
    Foo(std::forward<T>(a));
}

int main()
{
    Foo(6,7);
    //int 2variable!
}

关于可变模板参数的常规使用,可以看我另一篇文章:
https://blog.csdn.net/grayrail/article/details/129274673

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值