问题标签 [function-pointers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
1841 浏览

C++ 函数指针和类

说我有:

只要我要用于渲染的函数是函数或static成员函数,这很好:

但是,我真的希望能够使用类方法,因为在大多数情况下,渲染函数会想要访问成员变量,并且我宁愿不使类实例成为全局的,例如

但是我真的不知道如何做到这一点,并且仍然允许使用函数和static成员函数。

0 投票
12 回答
5812 浏览

使用指向成员函数的指针与使用开关的成本是多少?

我有以下情况:

在我当前的实现中,我将 in 的值保存whichFoo在构造函数中的数据成员中,并使用switchincallFoo()来决定调用哪个 foo。或者,我可以switch在构造函数中使用 a 来保存指向要在fooN()中调用的权利的指针callFoo()

callFoo()我的问题是,如果 A 类的对象只构造一次,而被调用很多次,那么哪种方式更有效。因此,在第一种情况下,我们多次执行 switch 语句,而在第二种情况下,只有一个 switch,并且使用指向它的指针多次调用成员函数。我知道使用指针调用成员函数比直接调用要慢。有谁知道这个开销是多于还是少于 a 的成本switch

澄清:我意识到,除非您尝试并计时,否则您永远不会真正知道哪种方法可以提供更好的性能。但是,在这种情况下,我已经实现了方法 1,我想知道方法 2 是否至少在原则上更有效。看来它可以,现在我费心去实现它并尝试它是有意义的。

哦,出于美学原因,我也更喜欢方法 2。我想我正在寻找实施它的理由。:)

0 投票
22 回答
90474 浏览

Java 中最接近函数指针的替代品是什么?

我有一个大约十行代码的方法。我想创建更多的方法来做同样的事情,除了一个小的计算会改变一行代码。这是一个完美的应用程序,用于传递函数指针以替换该行,但 Java 没有函数指针。我最好的选择是什么?

0 投票
4 回答
332 浏览

我们可以在 C 中使用函数指针调用函数吗?

我们可以使用函数指针调用函数吗?如果是的话怎么办?

0 投票
12 回答
318630 浏览

如何使用函数指针数组?

我应该如何在 C 中使用函数指针数组?

我怎样才能初始化它们?

0 投票
8 回答
4985 浏览

TCL有函数指针的概念吗?

与 TCL 合作,我想实现类似Strategy Pattern的东西。我想在 TCL 函数中传递用于打印输出的“策略”,这样我就可以轻松地在打印到屏幕和打印到日志文件之间切换。在 TCL 中执行此操作的最佳方法是什么?

0 投票
6 回答
3812 浏览

C中的函数指针-地址运算符“不必要”

在 C 中使用 qsort 我们传入一个比较函数,例如

qsort 的原型需要 aint (* )(const void* , const void*)所以我们称之为:

但调用同样有效:

如果我们在 C++ 中传入一个静态成员函数,这就是我们必须要做的。Kernighan & Ritchie (2nd Edition, 5.11 "Pointers To Functions" p119) 指出“由于 [cmp] 已知是一个函数,因此 & 运算符不是必需的,就像在数组名称之前不需要它一样。 "

有没有其他人对此感到有点不舒服(特别是关于类型安全)?

0 投票
7 回答
2337 浏览

如果我的编译器对函数指针的支持被破坏,我该如何编写调度程序?

我正在开发一个嵌入式应用程序,其中设备通过命令界面进行控制。我在 VC 中模拟了命令调度程序,并让它运行得令我满意;但是当我将代码移到嵌入式环境时,我发现编译器的指针函数的实现被破坏了。

以下是我最初实现代码的方式(在 VC 中):

如果不使用函数指针,似乎我唯一的希望是使用 switch()/case 语句来调用函数。但我想避免手动维护一个大的 switch() 语句。

我想做的是将所有 COMMAND_ENTRY 行移动到一个单独的包含文件中。然后用不同的#define 和#undefines 包装包含文件。就像是:

有没有人看到更好的方法来处理这种情况?可悲的是,“获得另一个编译器”不是一个可行的选择。:(

---编辑添加:只是为了澄清,特定的嵌入式环境被破坏,因为编译器应该创建一个“函数指针表”,然后编译器使用它来通过指针解析对函数的调用。不幸的是,编译器坏了,没有生成正确的函数表。

所以我没有一个简单的方法来提取函数地址来调用它。

--- 编辑#2:啊,是的,使用 void *(set|get)_dispatcher 是我尝试查看问题是否与 func 指针的类型定义有关。本来,我有

0 投票
5 回答
5083 浏览

使用远函数指针

我意识到 far 是特定于编译器的,但我的期望是 far 说明符的放置对那些真正理解指针的人来说应该是有意义的。

所以,我有两个应用程序共享处理器的整个内存空间。

应用 A 需要调用应用 B 中存在的函数 foo。

我知道函数 foo 的内存位置。

所以这应该工作,在应用程序A:

  • __far 在 typedef 中的正确位置吗?
  • 我是否需要将 __far 添加到 (MYFP) 演员表中?
  • 一些信息表明对 foo 的调用不需要取消引用,您的经验是什么?
  • 这看起来还有什么不正确的,或者我可以尝试完成这个吗?

  • 有一个更好的方法吗?

编辑:

这是在使用 Code Warrior 的嵌入式设备(飞思卡尔 S12XEQ 设备)上。这是一个具有 24 位内存空间的 16 位设备,所以是的,它是分段/存储的。

-亚当

0 投票
3 回答
8914 浏览

python中的函数指针

我想做类似以下的事情:

在python中,是否可以分配函数指针之类的东西?