问题标签 [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.
c - 在 C 中使用函数指针时的警告
这实际上是一个非关键问题,但我在大多数情况下使用函数指针时都会收到此警告,但我自己仍然无法弄清楚为什么。考虑以下原型:
到目前为止,我可以编译我的千行代码并获得零警告。所以我假设我正确地编写了声明。但后来我在代码中调用它,将 free 作为我的析构函数传递,因为存储在树节点中的数据是简单的结构:
这让我得到了一个"warning: passing argument 2 of 'tree_destroyLineage' from incompatible pointer type"
信息。我的第一个假设是编译器在编译时无法弄清楚这是同一件事Pointer
,void *
所以我尝试使用完全相同类型的函数指针创建另一个函数,以“重新传递”调用free()
并更改函数指针声明接受 avoid *
而不是指针。这两种方法在同一个地方给了我同样的警告。
我做错了什么,我该如何解决?
python - Python ctypes 和函数指针
这与我的另一个问题有关,但我觉得我应该在一个新问题中提出它。
基本上,FLAC 使用函数指针进行回调,并使用 ctypes 实现回调,您使用CFUNCTYPE
它们来原型化它们,然后使用prototype()
函数来创建它们。
我遇到的问题是我想我会这样创建我的回调函数(我没有显示我重新创建的结构,FLAC__Frame 是一个结构):
我遇到的问题是实施。FLAC__Frame 永远不会被程序员实例化,它只是从初始化函数和处理函数中调用。我必须自己编写回调函数,但他的问题是我不知道我该怎么做,所以如果有人知道我应该怎么做,那么一些帮助将不胜感激。
c++ - 如何在不取消引用的情况下调用指向函数的指针?
我在 Py++ 生成的 C++ 程序中有一个奇怪的 typedef 语句。
到目前为止,我发现上面的 typedef 语句不是我们大多数人都熟悉的类型,
相反,它是一种声明指向以 int 作为参数并返回 double (与原型相同)的函数的指针的方法。所以我现在的问题是,如何使用函数地址作为参数调用指向函数的指针(没有取消引用) ?这也与原型不匹配。有人请解释!
c++ - mem_fun_ref 麻烦
我很难弄清楚mem_fun_ref
。我必须承认,我通常将仿函数用于这类事情,因为它们可以内联以提高速度和利润。但是,这段代码不会成为瓶颈,所以我想尝试一下。
这是我想做的一个例子。我知道还有其他方法可以做到这一点。我不想使用copy
,我不想使用范围成员函数,我不想使用back_inserter
. 我特别想用mem_fun_ref
. 这只是一个简单的例子,实际情况要复杂得多。也就是说,我真的不知道为什么这是错误的,但我不熟悉mem_fun_ref
or mem_fun
。
这是我想要的工作:
但我得到3个错误:
reference to reference is illegal
让我认为该函数需要按值获取参数。但当然,这不可能在 中更改vector
,也不可能在我的代码中更改。是否有一个简单的改变来让它工作?我需要一个 1-liner 的解决方案。
php - 如何将成员函数分配给数组并调用它
我目前正在这样做,但似乎不是正确的方法:
因为直接分配一个函数会引起警告,应该这样做:
比如说,把它变成一个字符串,但是当它是一个成员函数时我不知道该怎么做。
以下版本可以吗?:
调用它时,只需:
language-agnostic - C# 委托、动态代理、闭包和函数指针之间有什么区别?
将方法或函数作为数据传递的常用方法有哪些有用的定义,例如:
- 代表们
- 闭包
- 函数指针
- 通过动态代理调用和
- 一流的方法?
c++ - 如何传递指向构造函数的函数指针?
我正在努力在 C++ 中实现反射机制。我的代码中的所有对象都是 Object(我自己的泛型类型)的子类,其中包含 Class 类型的静态成员数据。
对于具有静态类成员数据的 Object 的任何子类,我希望能够使用指向该子类的构造函数的指针来初始化“create”。
c++ - 指向非静态成员函数的 C++ 函数指针(类成员)
我怎样才能让它工作?
c++ - 运算符可以用作函数吗?(C++)
这类似于我提出的另一个问题,但是,我创建了一个表达式类,其工作方式如下:
其中 GreaterThan 是先前定义的函数。我想知道为什么我不能这样做:
特别是当 > 被重载为
这与 GreaterThan 相同:
返回 bool 并接受两个参数的函数。
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 程序集调用(这当然很可怕),可能会导致调用堆栈出现重大问题。
既不优雅,也不沉稳……你的方法/建议是什么?