有没有办法组合多个几乎相同的功能?

时间:2019-10-19 21:30:03

标签: c++ function

硬件东西,
中断需要void(*)()-静态函数

因此,如果我想中断以调用特定对象T t的成员,则必须为静态函数T* t_star创建一些void foo(){ t_star->whatever;}来引用。
如果我要几个中断,我必须要有几对这样的function-global_pointer

T* t_star_1;
void foo_1() {t_star_1->whatever;}
T* t_star_2;
void foo_2(){t_star_2->whatever;}
...

如您所见,这导致几乎相同的代码膨胀
现在,合并T*很明显-T* Array[5]

如何对功能执行相同操作?它们现在仅在单个数组索引中有所不同...是否有一种方法可以不编写每个索引?

1 个答案:

答案 0 :(得分:1)

  

它们[功能]现在仅在单个数组索引中有所不同...

听起来像模板要处理的东西。

template <unsigned Index>
void foo()
{
    Array[Index]->whatever;
}

然后,您的回调将为foo<0>foo<1>等。(很奇怪的是,这些回调不带任何参数。以我的经验,这种API通常允许{{1} }参数将数据传递给回调,这样您就不必诉诸全局变量。

根据您计划如何填充阵列,这是另一种可能性。假设您可以将void*初始化为Array[i]的返回值。这样的好处是不需要全局变量。

get_data(i)