【发布时间】:2014-02-03 05:27:07
【问题描述】:
我在 Arduino IDE 中使用了一个计时器库,该库具有一个函数,该函数将“void(*func)(void)”作为参数并在一定时间后运行它。我需要在我的代码中传递一个函数库,问题是我需要做同样事情的“n”个函数(只是函数内部涉及的变量采用不同的值,我从结构数组中获取),这就是为什么我不能只使用一个函数,我需要能够编译具有相同语法但涉及不同变量的不同函数。
我不知道如何解决这个问题,我想做的是能够像在 for 循环中一样创建函数,
for(int i=0;i<MAX_FUNC;i++)
{
void func[i](){
x= structuredata.x[i];
}
}
我知道这种语法是完全错误的,但我想知道如何才能实现这样的目标。我尝试改用类,但库不允许我使用在类中创建的 void 函数作为参数,它表示“未解析的重载函数类型”
【问题讨论】:
-
你是指模板之类的东西吗?
-
是的,我希望能够创建函数,只修改函数名称和我想在函数内部访问的数组
-
我想您是在问如何复制粘贴功能,例如
func1() { x = data.x[1]; }然后func2、func3等等。必须有更好的方法来解决您的问题问题!例如,只需让您的函数采用int i并将函数设为func(int i) { x = data.x[i]; }或类似的东西? -
我见过的大多数采用类似回调的库,也采用额外的 void* 以便您可以将任意数据传递给您的函数,这样您就不会陷入这种情况。你确定你的定时器库不提供吗?
-
哦,它甚至是一个 C++ 库而不是 C。非常糟糕。我会毫不犹豫地分叉它。可能使用模板仿函数 ir std::function 代替。
标签: c++