模板的嵌套调用,并组合了函数指针数组模板,在一些复杂的应用场合能起到非常好的效果;
参考: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