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

c - 如何在 C 中声明一组常量函数指针?

我需要声明一个指向函数的指针数组,如下所示:

但是,我希望将数组声明为常量——数组中的数据和指向数据的指针。不幸的是,我不记得在哪里放置 const 关键字。

我假设实际的指针 MESSAGE_HANDLERS 在这种情况下已经是常量,因为它被声明为一个数组。另一方面,如果数组中的函数指针按所示声明,它不能在运行时更改吗?

0 投票
13 回答
66653 浏览

c - 如何从 Linux 内核中的函数指针获取函数名?

如何从C中的函数指针获取函数名?

编辑:真实情况是:我正在编写一个 linux 内核模块并且我正在调用内核函数。其中一些函数是指针,我想在内核源代码中检查该函数的代码。但我不知道它指向哪个函数。我认为可以这样做,因为当系统失败(内核恐慌)时,它会在屏幕上打印出当前调用堆栈以及函数名称。但是,我想我错了……是吗?

0 投票
10 回答
10940 浏览

java - Java中的函数指针/委托?

对于我的 Java 游戏服务器,我发送数据包的操作 ID,它基本上告诉服务器数据包的用途。我想将每个动作 ID(一个整数)映射到一个函数。有没有办法在不使用开关的情况下做到这一点?

0 投票
4 回答
1349 浏览

c++ - 从 vc++ 调用存储在堆中的代码

想象一下我正在做这样的事情:

如何定义一个函数指针来调用 p ,就好像它是一个函数一样?(我正在使用 VC++ 2008 express)。

谢谢

0 投票
13 回答
147334 浏览

c++ - 如何将类成员函数作为回调传递?

我正在使用一个 API,它要求我将函数指针作为回调传递。我正在尝试在我的课堂上使用这个 API,但我遇到了编译错误。

这是我从构造函数中所做的:

这不会编译 - 我收到以下错误:

错误 8 错误 C3867:'CLoggersInfra::RedundencyManagerCallBack':函数调用缺少参数列表;使用 '&CLoggersInfra::RedundencyManagerCallBack' 创建指向成员的指针

我尝试了使用的建议&CLoggersInfra::RedundencyManagerCallBack- 对我不起作用。

对此有任何建议/解释吗?

我正在使用VS2008。

谢谢!!

0 投票
9 回答
1842 浏览

c++ - C ++,指向函数和指向成员函数的指针之间的等价?

我习惯于认为成员函数只是普通函数的一种特殊情况,其中成员函数在其参数列表的开头有一个额外的参数,用于 'this' 指针,即成员函数所在的对象应该采取行动。我过去曾以这种方式使用过 boost::function 并且从未遇到任何问题:

但是我已经看到了成员函数指针的这种语法:

在此语法中,“this”参数不可见。这让我想知道,指向成员函数的指针是否真的是一个单独的野兽,而这种提升正在为我处理细节。

标准对“this”参数的位置有何规定?也许只是在我的编译器上,额外的“this”参数首先出现,也许在其他编译器上它可能在最后?我是否很幸运,我的思维方式与我的编译器(GCC4、VS2005)处理它的方式一致?指向成员函数的指针总是只是带有额外参数的指向函数的特例,还是编译器可以以不同的方式实现它们?

0 投票
3 回答
560 浏览

c++ - 如何将 COM 方法作为函数参数传递?和 Microsoft 编译器错误 C3867

我想将 COM 方法作为函数参数传递,但出现此错误(Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86):

错误 C3867:“IDispatch::GetTypeInfoCount”:函数调用缺少参数列表;使用 '&IDispatch::GetTypeInfoCount' 创建指向成员的指针

我错过了什么?

非常感谢你。

0 投票
2 回答
5789 浏览

c++ - 指向类成员函数问题的函数指针

首先,我必须承认我的编程技能非常有限,并且我接管了一个(非常小的)现有 C++ OOP 项目,我试图将自己的东西推入其中。不幸的是,我遇到了一个超出我知识范围的问题,并且我希望能在这里找到一些帮助。我正在使用第三方库(无法更改)从相机中获取图像,并将在此处使用一些占位符名称。

第三方库有一个函数“ThirdPartyGrab”来启动连续实时抓取,并获取一个指向函数的指针,每次新帧到达时都会调用该函数。所以在一个普通的 C 应用程序中它是这样的:

“HookFunction”需要声明为:

或声明为“BUF_HOOK_FUNCTION_PTR”

现在我有一个 C++ 应用程序和一个类“MyFrameGrabber”,它应该封装我所做的一切。所以我将钩子函数作为私有成员放入,如下所示:

我的班级中还有一个公共 void 函数“StartGrab”应该启动 Grab。在里面我试着打电话:

这(不足为奇)失败了。它说对 MyFrameGrabber::HookFunction 的函数调用错过了参数列表,我应该尝试使用 &MyFrameGrabber::HookFunction 来创建一个指针。但是,传递“&MyFrameGrabber::HookFunction”会导致另一个错误,即无法将其转换为 BUF_HOOK_FUNCTION_PTR。

通读C++ FAQ 函数指针后,我想我理解了问题,但无法提出解决方案。我试图将钩子函数设为静态,但这也会导致转换错误。我也想过将钩子函数放在类之外,但我需要在钩子函数中使用类函数。有没有其他方法或者我需要改变我的整个概念?

编辑 14.01.08:我测试了单例解决方法,因为我无法更改第三方库,并且 void 指针仅用于钩子函数内部使用的数据。不幸的是,它并没有像我希望的那样开箱即用......我不知道静态函数是否需要放在一个单独的类中,所以我把它放在我的“MyFrameGrabber”类中:

在我的 cpp 文件中,我有 call_hook 函数:

但这给了我一个错误,static MatroxFrameGrabber _instance;因为找不到匹配的标准构造函数。这是正确的,因为我的 MyFrameGrabber 构造函数如下所示:

我试图放入一个空的构造函数MyFrameGrabber();,但这会导致链接器错误。我应该将空参数传递给单例中的 MyFrameGrabber 构造函数吗?或者我是否需要一个单独的 Hook 类,如果是,我如何访问 MyFrameGrabber 函数?提前致谢。

第二次编辑 15.01.08:我应用了更改,现在可以编译和链接。不幸的是,我还不能在运行时测试它,因为它是一个 DLL,而且我还没有 Debug Caller Exe,并且在初始化等过程中还有其他问题。我会将帖子标记为答案,因为我确信这是正确的方法。

0 投票
18 回答
283161 浏览

java - Java中的回调函数

有没有办法在 Java 方法中传递回调函数?

我试图模仿的行为是将.Net Delegate 传递给函数。

我见过有人建议创建一个单独的对象,但这似乎有点矫枉过正,但是我知道有时矫枉过正是做事的唯一方法。

0 投票
5 回答
371 浏览

c++ - 我可以简化一下吗?

addFunction 方法将函数添加到基类中的列表中,
然后可以枚举该列表以调用所有函数。

有什么方法可以简化(减少打字工作)添加功能?