硬件东西,
中断需要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]
如何对功能执行相同操作?它们现在仅在单个数组索引中有所不同...是否有一种方法可以不编写每个索引?
答案 0 :(得分:1)
它们[功能]现在仅在单个数组索引中有所不同...
听起来像模板要处理的东西。
template <unsigned Index>
void foo()
{
Array[Index]->whatever;
}
然后,您的回调将为foo<0>
,foo<1>
等。(很奇怪的是,这些回调不带任何参数。以我的经验,这种API通常允许{{1} }参数将数据传递给回调,这样您就不必诉诸全局变量。
根据您计划如何填充阵列,这是另一种可能性。假设您可以将void*
初始化为Array[i]
的返回值。这样的好处是不需要全局变量。
get_data(i)