我正在创建一个简单的调度程序来执行FIFO队列中包含的函数。
这些函数具有相同的返回类型int
,但具有不同数量的int
参数。
我尝试实现它this way,但它似乎不起作用。编译器禁止在int(*)()
,int(*)(int)
,int(*)(int, int)
或任何类型之间进行转换。 (Arduino Sketch编译器)
有没有办法解决这个问题,或者你能推荐一个更好的方法吗?谢谢!
我的代码:
typedef int (*fnptr)(); // Tried this!
int foo(int var) {
return 0;
}
int main() {
fnptr fp = &foo; // error: invalid conversion from
// 'int (*)(int)' to 'int (*)()'
// [-fpermissive]
return 0;
}
答案 0 :(得分:0)
你可以施放:
fnptr fp = reinterpret_cast<fnptr>(foo);
()
是“函数调用运算符”,在这种情况下添加它们根本就没有意义,它将表达式从“取这个函数的地址”改为“取这个函数的地址”返回值“。
请注意,aboev我甚至不包含&
,这是因为函数的名称就像一个函数指针,因此它已经是一个地址。