gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:45 26 4
gpt4 key购买 nike

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

所以如果我想中断调用特定对象 T t 的成员,我必须为静态函数 void foo(){ 创建一些 T* t_star 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]

我如何为函数做同样的事情?它们现在仅在单个数组索引上有所不同...有没有办法不写每个和其中一个?

最佳答案

They [functions] differ only in a single array index now...

听起来像是设计用于处理模板的内容。

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

您的回调将是 foo<0> , foo<1>等等(奇怪的是,这些回调没有参数。根据我的经验,这种 API 通常允许 void* 参数将数据传递给回调,这样您就不必求助于全局变量。)

这是另一种可能性,具体取决于您计划如何填充数组。这假设您可以初始化 Array[i]get_data(i) 的返回值.这样做的好处是不需要全局变量。

template <unsigned Index>
void foo()
{
static T * data = get_data(Index);
data->whatever;
}

关于c++ - 有没有办法组合多个几乎相同的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58468172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com