C++模板的高级用法

模板的嵌套调用,并组合了函数指针数组模板,在一些复杂的应用场合能起到非常好的效果;
参考:swarm_ros_bridge

#include <iostream>
using namespace std;
/// 定义一个模板函数,类型参数分别是T和int
template <class T, int i>
void sub_cb(const T &msg);

// 定义一个函数指针数组的模板
template <class T>
void (*sub_callback[])(const T &);

// 定义一个模板函数,类型参数是T
template <class T>
void nh_sub(T &msg, int i);
// 现在,我们用nh_sub调用sub_callback,并在sub_callback里面调用sub_cb,从而实现对于不同的i做不同的处理;
// 模板的嵌套调用,首先对上面3个函数做具体的实现
// 这里的不同的i可以作为vector的下标,可以做很多不同的操作
template <class T, int i>
void sub_cb(const T &msg)
{
    cout << "string:" << msg << " "
         << "i:" << i << endl;
};

template <class T>
void (*sub_callback[])(const T &)
{
    // cout << "Call sub_cb!" << endl;
    sub_cb<T, 0>, sub_cb<T, 1>, sub_cb<T, 2>
};

template <class T>
void nh_sub(const string &msg, int i)
{
    cout << "Call sub_callback!" << endl;
    //调用函数指针数组的内容
    sub_callback<T>[i](msg);
};
int main()
{
    nh_sub<string>("number0", 0);
    nh_sub<string>("number1", 1);
    nh_sub<string>("number2", 2);
    getchar();
}

输出:

Call sub_callback!
string:number0 i:0
Call sub_callback!
string:number1 i:1
Call sub_callback!
string:number2 i:2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒙蒂锅巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值