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

c - 在 C 中使用函数指针时的警告

这实际上是一个非关键问题,但我在大多数情况下使用函数指针时都会收到此警告,但我自己仍然无法弄清楚为什么。考虑以下原型:

到目前为止,我可以编译我的千行代码并获得零警告。所以我假设我正确地编写了声明。但后来我在代码中调用它,将 free 作为我的析构函数传递,因为存储在树节点中的数据是简单的结构:

这让我得到了一个"warning: passing argument 2 of 'tree_destroyLineage' from incompatible pointer type"信息。我的第一个假设是编译器在编译时无法弄清楚这是同一件事Pointervoid *所以我尝试使用完全相同类型的函数指针创建另一个函数,以“重新传递”调用free()并更改函数指针声明接受 avoid *而不是指针。这两种方法在同一个地方给了我同样的警告。

我做错了什么,我该如何解决?

0 投票
2 回答
11947 浏览

python - Python ctypes 和函数指针

这与我的另一个问题有关,但我觉得我应该在一个新问题中提出它。

基本上,FLAC 使用函数指针进行回调,并使用 ctypes 实现回调,您使用CFUNCTYPE它们来原型化它们,然后使用prototype()函数来创建它们。

我遇到的问题是我想我会这样创建我的回调函数(我没有显示我重新创建的结构,FLAC__Frame 是一个结构):

我遇到的问题是实施。FLAC__Frame 永远不会被程序员实例化,它只是从初始化函数和处理函数中调用。我必须自己编写回调函数,但他的问题是我不知道我该怎么做,所以如果有人知道我应该怎么做,那么一些帮助将不胜感激。

0 投票
5 回答
2043 浏览

c++ - 如何在不取消引用的情况下调用指向函数的指针?

我在 Py++ 生成的 C++ 程序中有一个奇怪的 typedef 语句。

到目前为止,我发现上面的 typedef 语句不是我们大多数人都熟悉的类型,

相反,它是一种声明指向以 int 作为参数并返回 double (与原型相同)的函数的指针的方法。所以我现在的问题是,如何使用函数地址作为参数调用指向函数的指针(没有取消引用) ?这也与原型不匹配。有人请解释!

0 投票
4 回答
2034 浏览

c++ - mem_fun_ref 麻烦

我很难弄清楚mem_fun_ref。我必须承认,我通常将仿函数用于这类事情,因为它们可以内联以提高速度和利润。但是,这段代码不会成为瓶颈,所以我想尝试一下。

这是我想做的一个例子。我知道还有其他方法可以做到这一点。我不想使用copy,我不想使用范围成员函数,我不想使用back_inserter. 我特别想用mem_fun_ref. 这只是一个简单的例子,实际情况要复杂得多。也就是说,我真的不知道为什么这是错误的,但我不熟悉mem_fun_refor mem_fun

这是我想要的工作:

但我得到3个错误:

reference to reference is illegal让我认为该函数需要按值获取参数。但当然,这不可能在 中更改vector,也不可能在我的代码中更改。是否有一个简单的改变来让它工作?我需要一个 1-liner 的解决方案。

0 投票
6 回答
1584 浏览

php - 如何将成员函数分配给数组并调用它

我目前正在这样做,但似乎不是正确的方法:

因为直接分配一个函数会引起警告,应该这样做:

比如说,把它变成一个字符串,但是当它是一个成员函数时我不知道该怎么做。

以下版本可以吗?:

调用它时,只需:

0 投票
3 回答
5596 浏览

language-agnostic - C# 委托、动态代理、闭包和函数指针之间有什么区别?

将方法或函数作为数据传递的常用方法有哪些有用的定义,例如:

  • 代表们
  • 闭包
  • 函数指针
  • 通过动态代理调用和
  • 一流的方法?
0 投票
7 回答
38484 浏览

c++ - 如何传递指向构造函数的函数指针?

我正在努力在 C++ 中实现反射机制。我的代码中的所有对象都是 Object(我自己的泛型类型)的子类,其中包含 Class 类型的静态成员数据。

对于具有静态类成员数据的 Object 的任何子类,我希望能够使用指向该子类的构造函数的指针来初始化“create”。

0 投票
6 回答
56988 浏览

c++ - 指向非静态成员函数的 C++ 函数指针(类成员)

我怎样才能让它工作?

0 投票
5 回答
422 浏览

c++ - 运算符可以用作函数吗?(C++)

这类似于我提出的另一个问题,但是,我创建了一个表达式类,其工作方式如下:

其中 GreaterThan 是先前定义的函数。我想知道为什么我不能这样做:

特别是当 > 被重载为

这与 GreaterThan 相同:

返回 bool 并接受两个参数的函数。

0 投票
3 回答
445 浏览

c - 不使用 JMP 或 LCALL 调用任意函数的最佳策略

在嵌入式 C 中,有一些固定/通用算法是很自然的,但不止一种可能的实现。这是由于几个产品展示,有时是选项,有时只是产品路线图策略的一部分,例如可选 RAM、不同 IP 集 MCU、升级频率等。

在我的大多数项目中,我通过将核心内容、算法和逻辑架构与实现外部状态评估、计时、内存存储等的实际功能解耦来处理这个问题。

自然地,我使用 C 函数指针机制,并为这些指针使用一组有意义的名称。例如

将温度存储在一个 int 中,返回是 OKness。

现在想象一下,对于产品的特定配置,我有一个

从 TMP75 设备读取 I2C 总线上的温度的功能和

一种读取二极管压降的函数,由 ADC 读取,这是一种在非常广泛的范围内评估温度的方法。

这是相同的基本功能,但在不同的选项集产品上。

在某些配置中,我会将 ucEvalTemperature 设置为 ucReadI2C_TMP75,而在其他配置中,我将使用 ucReadCh2_ADC。在这种温和的情况下,为避免出现问题,我应该将参数类型更改为 int,因为指针的大小始终相同,但函数签名不是,编译器会抱怨。好吧……那不是杀手。

这个问题在可能需要不同参数集的函数上变得很明显。签名永远不会正确,编译器将无法解析我的 Fpointers。

所以,我有三种方法:

  • 使用全局参数栈,所有函数都是 unsigned char Func(void);
  • 对每个实现使用帮助函数,让我打开正确的分配以进行/调用;
  • 使用 JMP / LCALL 程序集调用(这当然很可怕),可能会导致调用堆栈出现重大问题。

既不优雅,也不沉稳……你的方法/建议是什么?