问题标签 [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 投票
1 回答
1746 浏览

c++ - 纯虚方法 VS。函数指针

最近我一直在设计一个 Thread 类库,我做了一个 Thread 抽象类,如下所示:

真正的线程类会继承这个抽象类并doOperation以自己的逻辑实现方法,类似于Strategy Pattern

问题是我依赖于一个 C 后端库,它定义了在以下函数中运行线程:

如你看到的; 第二个参数是一个指向线程循环(主函数)的函数指针,这就是问题所在;由于我使用这个 C 函数在run方法中启动线程,所以我将地址传递doOperation给第二个参数,但由于类型不匹配,这无法完成。

我尝试使用reinterpret_cast返回指针,但我 ISO-C++ 禁止返回未初始化函数成员的指针。我不知道如何克服这个冲突,我猜使用静态方法是唯一的解决方案,但这会破坏我的设计模式!

0 投票
4 回答
9883 浏览

function - 使用 Lua 访问函数的主体

我将回到这里的基础知识,但在 Lua 中,您可以像这样定义一个表:

打印表引用本身会带回一个指向它的指针。要访问它的元素,您需要指定一个索引(即,就像您使用数组一样)

现在函数是一个不同的故事。您可以像这样定义和打印函数:

有没有办法访问已定义函数的主体。我正在尝试组合一个小型代码可视化器,并希望使用特殊函数/变量“播种”给定函数,以允许可视化器将自身“挂钩”到代码中,我需要能够重新定义该函数变量或字符串。

0 投票
7 回答
97802 浏览

c - 将函数指针转换为另一种类型

假设我有一个接受void (*)(void*)函数指针用作回调的函数:

现在,如果我有这样的功能:

我可以安全地做到这一点吗?

我已经查看了这个问题,并且查看了一些 C 标准,这些标准说您可以强制转换为“兼容函数指针”,但我找不到“兼容函数指针”含义的定义。

0 投票
4 回答
1455 浏览

c++ - 还有什么方法可以实现“模板化函数指针”?

是否可以建立一组模板化的函数指针,而无需手动操作?这是一个例子来说明我在说什么。

假设我有一个经常调用的函数“write”,我有两个实现(write0 和 write1),我希望能够在它们之间动态切换。这些写函数是在参数类型上模板化的。一种方法是只使用一个模板化的前端函数 write(),它在内部使用 if 语句。

事实证明这对我的需求来说足够快了,但现在我想知道我是否可以使用函数指针来做同样的事情(只是为了好玩)。这种方法的问题是设置函数指针很麻烦。有没有其他方法可以基本上实现 write() 的理想但没有条件(直接静态调度)?

(其他“规则”:我不能将 Msg 类更改为具有 write() 方法,也不能更改使用站点代码以将 Msgs 替换为 Msgs 的适配器。)

FWIW,我发现这篇文章基本上和我在这里说的一样。

0 投票
5 回答
23513 浏览

c++ - 静态与外部“C”/“C++”

静态成员函数和外部“C”链接函数有什么区别?例如,在 C++ 中使用“makecontext”时,我需要传递一个指向函数的指针。Google 建议使用外部“C”链接,因为“makecontext”是 C。但我发现使用静态也可以。我只是幸运还是...

对比

编辑:您能否展示静态成员版本不起作用的编译器或体系结构(并且它不是编译器中的错误)?

0 投票
5 回答
2702 浏览

c++ - 函数指针到底指向哪里?

鉴于所有原始数据类型和对象都分配了内存,直观地很容易想象指向这些类型的指针。

但是函数指针到底指向哪里呢?鉴于指令被转换为机器代码并驻留在内存中,我们是否应该认为它们指向与函数指令的开头相对应的内存位置?

由于非法内存访问,我们面临许多指针错误。当函数指针指向数据存储器而不是指令存储器时是否会发生错误?

0 投票
2 回答
449 浏览

c++ - 在 C++ 中有 &func 或 class::func 的用途吗?

这似乎不一致。为什么我们使用 &Example::func 而不是 Example::func?Example::func 或 &exampleFunction 有没有用处?似乎我们不能引用一个函数,以便排除 Example::func。而且我想不出一种使用 &exampleFunction 的方法,因为 exampleFunction 已经返回了一个指针。

0 投票
2 回答
2987 浏览

dll - 将函数指针作为参数传递给 dll 函数并从 dll 内部调用它们是否安全?

我想将一些(dll 与否)函数指针作为参数传递给某些 dll 函数,并从 dll 内部调用它们。我想知道它是否安全,因为我在http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.cbcpx01/fpref 上找到了信息。 htm那:

在 DLL 代码中,假定函数指针指向函数描述符。函数指针调用首先通过解引用指针获得函数地址;然后,分支到函数入口。当非 DLL 函数指针传递给 DLL 代码时,它直接指向函数入口。尝试通过此类指针取消引用会产生未定义的函数地址。随后分支到未定义地址可能会导致异常。

此规则是否也适用于 Visual Studio 和其他编译器?

我真正想做的是解决各种dll和非dll函数之间的内存分配和释放问题。我的想法是在一些初始化(例如 Initialize(&malloc, &free))中将两个函数指针(用于常见的分配和释放函数)传递给每个 dll,然后使用这些常见且始终兼容的函数进行所有内存管理。

0 投票
10 回答
1914 浏览

c++ - 为什么要在 C++ 中使用指向成员方法的函数指针?

很多 C++ 书籍和教程都解释了如何做到这一点,但我还没有看到有一个令人信服的理由来选择这样做。

我非常理解为什么函数指针在 C 中是必需的(例如,当使用一些 POSIX 工具时)。但是,AFAIK 由于“this”参数,您无法向他们发送成员函数。但是,如果您已经在使用类和对象,为什么不直接使用函子之类的面向对象的解决方案呢?

您必须使用此类函数指针的真实世界示例将不胜感激。

更新:感谢大家的回答。不过,我不得不说,这些例子都没有真正让我相信,从纯 OO 的角度来看,这是一种有效的机制......

0 投票
11 回答
15586 浏览

c# - 使用函数指针的好处

我已经编程了几年,并且在某些情况下使用了函数指针。我想知道的是什么时候出于性能原因使用它们是合适的或不使用它们,我的意思是在游戏而不是商业软件的背景下。

函数指针很快,John Carmack 在 Quake 和 Doom 源代码中滥用了它们,因为他是个天才 :)

我想更多地使用函数指针,但我想在最合适的地方使用它们。

如今,在现代 c 风格语言(如 C、C++、C# 和 Java 等)中,函数指针的最佳和最实用的用途是什么?