问题标签 [member-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 投票
8 回答
25868 浏览

c++ - C++ 继承和成员函数指针

在 C++ 中,成员函数指针可以用来指向派生(甚至是基)类成员吗?

编辑:也许一个例子会有所帮助。假设我们有一个按继承顺序排列的 三个类X,Y的层次结构。因此有一个基类和一个派生类。ZYXZ

现在我们可以p为 class定义一个成员函数指针Y。这写成:

(为简单起见,我假设我们只对带有签名的函数感兴趣void f()

这个指针p现在可以用来指向类的成员函数Y

这个问题(实际上是两个问题)是:

  1. 可以p用来指向派生类中的函数Z吗?
  2. 可以p用来指向基类中的函数X吗?
0 投票
5 回答
6970 浏览

c++ - 如何键入一个指向方法的指针,该方法返回该方法的指针?

基本上我有以下课程:

stateA() 和 stateB() 方法应该能够返回指向 stateA() 和 stateB() 的指针。如何键入定义StateMethod?

0 投票
3 回答
17239 浏览

c++ - 指向虚拟成员函数的指针。它是如何工作的?

考虑以下 C++ 代码:

如果我不得不猜测,我会说 &A::f 在这种情况下意味着“A 的 f() 实现的地址”,因为指向常规成员函数和虚拟成员函数的指针之间没有明确的分隔. 由于 A 没有实现 f(),这将是一个编译错误。然而,事实并非如此。

不仅如此。以下代码:

实际上会调用 B::f。

它是如何发生的?

0 投票
3 回答
4287 浏览

c++ - 如何散列和比较指向成员函数的指针?

我如何散列(std::tr1::hash 或 boost::hash)一个 c++ 指向成员函数的指针?

例子:

我有几个 bool (Class::*functionPointer)() (不是静态的)指向类 Class 的几个不同方法,我需要散列那些指向成员函数的指针。

我怎样才能做到这一点?

另外,我如何比较(std::less)那些成员函数指针,以便将它们存储在 std::set 中?

0 投票
6 回答
2572 浏览

c++ - 如何编写通用的“getData”函数?

我有一个类,比如“CDownloader”,它读取一些 XML 数据并提供节点名称的访问。它具有一些 getter 函数,如下所示:

我无法更改 CDownloader 类。相反,我想编写一些函数,通过使用 bool 标志而不是实际名称来下载项目。像这样的东西:

我可以单独编写 Download(Font|Integer|Image) 函数,但这会导致代码重复。我的想法是写一个模板,但我仍然茫然:如何确定我应该从 CDownloader 类中调用什么方法?为每种数据类型专门化模板意味着再次陷入代码重复。将 getter 函数作为“函数指针”参数传递?但是吸气剂签名在 CDownloader 中有所不同......

总结起来,问题是:是否可以围绕 CDownloader 编写通用包装器,或者我是否必须为每个“get***”函数复制代码?提前致谢!

0 投票
4 回答
3065 浏览

c++ - C++ 成员函数指针和 STL 算法

我有一个抽象函子类,它重载了 operator() 和实现它的派生对象。

我有一个函数(另一个类的一部分),它试图获取这些仿函数类的数组,并尝试将指向成员函数的指针传递给 std 算法 for_each(),这是我正在做的事情的概述:

编辑:为了清楚起见,我重新清理了它并放置了旧的小例子。

我尝试了几种方法,但不知道如何让它工作,我需要使用抽象类型,因为我可以有不同的派生类型,但它们都必须实现相同的 operator()(param x ) 功能。

我只需要 for_each() 函数就可以调用成员函数 operator()(param x)。我有一个不同的函数,它有具体的实现,只需传递一个实例就可以了。我试图在这里达到类似的效果,但不知道我得到了什么具体的课程。

我究竟做错了什么?

0 投票
4 回答
253 浏览

c++ - 重新解释成员函数指针是一个“好主意”吗?

我有一个工作线程,它包含一个“线程操作”列表,并作为时间处理它们。

通常是这样称呼的

哪个工作得很好,直到

改为

遗憾的是,我们无法再次将其更改回来,因为其他内容需要新格式(并且重载不能仅因返回类型而异)。

我确实尝试过

这似乎工作得很好,但我不确定重新解释这样的函数指针是“定义”的行为,有人可以建议吗?

0 投票
2 回答
4661 浏览

c++ - C++ 比较成员函数指针

在 C++ 中,是否可以为指向成员函数的指针定义排序顺序?似乎 operator< 未定义。此外,强制转换为 void* 是非法的。

谢谢!

0 投票
3 回答
771 浏览

c++ - 指向 C++ 中成员函数的函数指针

我需要调用一个需要函数指针的方法,但我真正想要传递给它的是函子。这是我正在尝试做的一个例子:

我一直无法找到编译最后一行printer(g, 4) 的方法。有没有办法让它工作?我唯一能控制的是方法“main”和类“adderClass”。

0 投票
2 回答
660 浏览

c++ - specialization on const member function pointers

I am trying to specialize some utility code on const member functions, but have problems to get a simple test-case to work.
To simplify the work i am utilizing Boost.FunctionTypes and its components<FunctionType> template - a MPL sequence which should contain the tag const_qualified for const member functions.

But using the test-code below, the specialization on const member functions fails. Does anybody know how to make it work?

The test-code prints out (using VC8 and boost 1.40):

non-const
non-const

Expected output is:

non-const
const

The test-code itself: