【发布时间】:2012-07-21 09:54:03
【问题描述】:
我正在努力将 C 代码转换为 c++,在代码的一部分中我有类似的东西 C 中的函数数组如下所示:
这就是 C 的样子:
void func1(bool a)
{
..
}
void func2(bool a)
{
..
}
void func3(bool a)
{
..
}
struct func
{
void (*f)(incoming *);
int arg_length;
};
typedef struct func func;
func funcs[] = {
{ func1, 4 },
{ func2, 10 },
{ func3, 4 }
};
如何转换成c++?
更新:
问题:这是非静态函数指针的有效答案吗?
http://www.newty.de/fpt/fpt.html#chapter2
我也可以定义不同类型的成员函数指针数组吗?
【问题讨论】:
-
这已经是有效的 C++。
-
实际上,我收回了这一点。这甚至不是有效的 C! (此外,需要将函数分配给具有不同签名的函数指针通常表明需要重新考虑设计。)
-
@OliCharlesworth:事实上,C 中允许任意函数指针转换。当然,调用错误类型之一是未定义的行为,因此很难想象如何这段代码可以做任何明智的事情。
-
@MikeSeymour:实际上,我想我们可以推断出 C++ 明确禁止上述代码,因为 g++ 将其报告为完全错误。所以是的,听起来你是对的,C++ 比 C 更严格。
-
@OliCharlesworth:确实,C++ 绝对不允许像这样的任意指针转换。