问题标签 [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 回答
934 浏览

c++ - C ++:指向非相关结构内的类成员函数的指针

我已经在网上阅读了一些关于如何解决这个问题的文章,我认为我做得对......我的目标是拥有一个结构对象数组,其中包含指向类的成员函数的指针。

这是我到目前为止所拥有的...

然后,当使用 (stuff[0].*handler)() 调用函数时,带或不带参数(我确实打算使用参数列表),我得到“处理程序”:未声明的标识符...

我必须错过一些东西,只是不知道是什么。

0 投票
2 回答
627 浏览

c++ - 模板基类 C++ 中的重写函数指针问题

我为观察者模式实现了一个模板基类,

我正在使用这样的课程

这里的问题是,编译器不能推断模板参数,我不能明确给出模板参数?

有人有想法吗?

编辑:这里的问题是使用模板参数覆盖函数调用。“Emit”函数适用于其他函数类型。

这种模式的用法是

顺便说一句,这是 C++。

0 投票
10 回答
335697 浏览

c++ - 通过函数指针调用 C++ 成员函数

如何获取类成员函数的函数指针,然后使用特定对象调用该成员函数?我想写:

另外,如果可能的话,我还想通过指针调用构造函数:

这可能吗?如果可以,最好的方法是什么?

0 投票
4 回答
4507 浏览

c - C:在传递给它的函数中传递函数指针

我正在尝试编写一个映射函数,它接受一个函数指针,并将其传递给另一个函数,但 gcc 对我大喊大叫。

这是我正在尝试做的事情的一个想法。

gcc的投诉:

警告:从不兼容的指针类型传递“地图”的参数 2

有任何想法吗?

0 投票
8 回答
3860 浏览

c++ - 我可以声明一个可以将指向自身的指针作为参数的函数吗?

阅读stackoverflow中的一个问题,我想知道是否可以声明一个带有指向自身的指针的函数。即作出这样的声明foo,以下是正确的:

最简单的想法是转换为另一个函数指针(不能转换为void*,因为它可能更小),所以函数声明如下所示:

虽然这在 C 中是可以的(并且可以在 C++ 中进行强制转换),但我想知道是否可以在没有如此艰难的“重新解释”强制转换或丢失类型信息的情况下完成。

换句话说,我想要以下声明:

但是,当然,无限制的声明是不可能的。天真typedef也无济于事。

欢迎使用 C++ 模板,即使它们使调用代码 ( foo(foo)) 看起来不那么简洁,但仍然是有限的。

C 风格的答案显示,如何在不强制转换的情况下删除类型信息,或者其他类似的技巧当然很有趣,但不会被接受。

0 投票
3 回答
1582 浏览

java - Java中的代表地图

我正在尝试为交互式 Java 程序做一个非常简单的命令行库。您启动 Java 程序,它会提示您输入命令。语法是:

例如:

在这里action = "addUser", object_1 = "name", object_2 = "John Doe", object_3 = "age", object_4 = "42"

动作之后的一切都是对象即动作使用对象)。您可以看到动作和对象是简单的字符串。如有必要,对象字符串也可以转换为数字。

我的计划是,这个命令行库的用户将简单地创建方法(属于任何合适的 Java 对象)并将每个方法分配给特定的操作。命令行中的对象成为用户分配的方法的参数。为上述示例实现方法的合适类是:

当用户键入命令时,程序员分配的相应函数会被调用,并使用命令行中指定的参数。

我知道 Java 没有函数指针(如 C)或委托(如 C#),实现回调的方法是通过接口,但是,我不知道在这种情况下如何使用接口。我看到的接口问题是它们有:

  1. 要实现的固定数量的功能
  2. 要实现的功能有一个固定的声明。

(1) 的问题是我的库的用户可能决定实现任意数量的功能,以实现他想要支持的任意数量的操作。(2) 的问题是用户希望分配具有描述性名称的函数,例如 addUserHandler() 用于“addUSer”操作。

如果 Java 有委托或函数指针,我只需在字符串(表示操作)和委托(用于程序中操作的实际实现)之间创建一个映射。我想我可以用反射来模拟委托,但它很血腥而且我失去了类型安全性,因为我必须对类和方法使用字符串名称。有没有更好的办法?

谢谢,

0 投票
2 回答
1307 浏览

c++ - 如何通过它们的派生类型比较两个指向对象的指针?

我有以下类层次结构:

我应该如何编写 Base::equal(Base *) 函数来比较 Derived4 和类似的类?它们没有数据字段,所以只检查实际对象是否属于同一个派生类。

以及如何编写 Derived1::equal(Base) - Derived2 和 Derived3 相似,它们没有任何数据字段,应该通过 Derived1 中的数据字段进行比较并检查对象是否来自同一个派生类?

更新:我想要这个,因为我不想为每个派生类编写相同的函数,例如:

0 投票
2 回答
12415 浏览

c++ - C++ 函数指针作为静态成员

我想不出将函数指针声明为静态成员的语法。

g++ 输出错误“无法声明指向‘void’成员的指针”。我假设我需要用括号做一些事情,但 void A::(*cb) = NULL 也不起作用。

0 投票
4 回答
2573 浏览

c++ - 如何从二进制数据中调用函数

我有一些二进制数据,其中包含一堆函数并想调用其中一个。我知道这些函数的签名以及相对于文件开头的偏移量。调用约定是默认的:__cdecl. 该文件已加载到具有执行权限的内存页面中。

例如(A, B,C是某些类型)

我怎样才能指定myOffset指向myFunction

0 投票
3 回答
1417 浏览

c++ - 在函数指针之间转换

我目前正在使用 Don Clugston 的 fastdelegates 实现计时器/回调系统。(见http://www.codeproject.com/KB/cpp/FastDelegate.aspx

这是起始代码:

好的,但是现在,我希望用户能够子类TimerContext化以存储并将他自己的结构发送到回调。这里的目的是防止用户不得不低调TimerContext自己

如您所料,GCC 不会让我这样做 :)

所以现在我的问题是:如果我强制演员使用reinterpret_cast,它会起作用,但它会安全吗?

PS:这些是时间关键的回调,重的面向虚拟的解决方案被认为是不切实际的:/