【问题标题】:convert C function array to c++ functions pointer array?将 C 函数数组转换为 C++ 函数指针数组?
【发布时间】: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++ 绝对不允许像这样的任意指针转换。

标签: c++ c


【解决方案1】:

您可以定义一个类,并插入一个“[]”运算符以获取指向函数的指针。

【讨论】:

  • 这是有效 C 不是有效 C++ 的一种情况。从 void(bool)void(*)(incoming*) 的转换在 C 中是允许的,但在 C++ 中是不允许的,所以你必须做一些事情来将它转换为 C++。
  • void (*f)(incoming *) 是一个指向不返回任何内容的函数的指针,并将指向结构“传入”的指针作为参数。我在 c++ 中没有看到任何错误。
  • 在 C++ 中不允许从不同的函数类型 void(bool) 进行隐式转换。所以从func1 初始化一个void(*f)(incoming*) 类型的变量是一个错误。
  • "C 语言嵌入在 C++ 中" - stackoverflow.com/questions/10461331
  • 这不是这个案例的正确答案,尽管 c 通常可以映射到 cpp
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2021-12-22
相关资源
最近更新 更多