【问题标题】:Can I have a static array of pointers to functions in C++?我可以在 C++ 中有一个指向函数的静态指针数组吗?
【发布时间】:2013-08-24 10:56:39
【问题描述】:

我需要一个全局函数指针数组,并想出了这个:

static int (*myArray[5])();

如果我是对的,这是“指向返回 int 的函数的全局指针数组”。那正确吗?或者它是“指向返回静态 int 的函数的指针数组”。我只需要一个快速的答案。

【问题讨论】:

  • 它几乎是前一个选项 - 数组是静态的而不是全局的。 cdecl 是检查这类事情的便捷方式。
  • @simonc 我可以在头文件中的任何类中使用这个数组吗?
  • this SO question,它可能会提供一些见解..
  • @ShimonRachlenko 对那里的静态数组一无所知
  • @SusanYanders 如果你想在标题中声明它,你必须在一个类中声明它或将它标记为extern

标签: c++ c pointers


【解决方案1】:

以下链接://www.cdecl.org/ 很有帮助(实际上我已将其添加为书签)。对于您的定义,它说:

declare myArray as static array 5 of pointer to function returning int

请注意,描述正确地将包含 5 个指针的数组分类为静态,并且该函数只返回一个 int。

【讨论】:

    【解决方案2】:

    static是存储类说明符,不是类型说明符或限定符,所以它指定了变量的存储类,对其类型没有影响。没有“静态”类型或“返回静态的函数”之类的东西——只有静态变量和静态函数/方法。

    【讨论】:

      【解决方案3】:

      您不需要或不需要全局变量的静态关键字。在 .cpp 文件中使用 static 会给变量内部链接(你想要外部链接)。如果没有静态,myArray 在功能上 仅对文件是全局的。如果您希望它对您添加的整个程序可见 extern int (*myArray[MY_FUNC_ARRAY_SIZE])(); 到您的 .h 文件中。

      【讨论】:

      • "如果没有静态 myArray 对文件来说是全局的" - 它实际上对程序来说是全局的,程序的其余部分只是不知道它。另一方面,对于静态文件,它是文件的“全局”(意味着可以从任何函数访问)。
      • 谢谢 - 我稍微改变了措辞以使我的意图更清楚(我希望)。
      【解决方案4】:

      应该尽可能简单,但不能简单:

      typedef int (*t_MyFunc)();
      
      t_MyFunc g_MyFuncArray[5];
      

      如果你愿意,g_MyFuncArray 可以是静态的(但你不应该如果你想要一个全局变量):

      static t_MyFunc g_MyFuncArray[5];
      

      在头文件中你应该写:

      extern t_MyFunc g_MyFuncArray[5];
      

      但在这种情况下,不要忘记在 .cpp 文件中省略 static 关键字。

      【讨论】:

      • 我可以在头文件中声明吗?课外?
      • @SusanYanders:您几乎可以在任何可以声明变量的地方声明它;问题是,你想完成什么?
      • static in .cppextern in .h
      • 如何“尽可能简单”地引入无关的 typedef?
      • 是的,我不会使用 typedef 我可以用普通的旧 int (*myArray[5])(); 更容易阅读它
      猜你喜欢
      • 2021-01-24
      • 1970-01-01
      • 2010-09-22
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      相关资源
      最近更新 更多