问题标签 [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.
c++ - C++ 继承和成员函数指针
在 C++ 中,成员函数指针可以用来指向派生(甚至是基)类成员吗?
编辑:也许一个例子会有所帮助。假设我们有一个按继承顺序排列的
三个类X
,Y
的层次结构。因此有一个基类和一个派生类。Z
Y
X
Z
现在我们可以p
为 class定义一个成员函数指针Y
。这写成:
(为简单起见,我假设我们只对带有签名的函数感兴趣void f()
)
这个指针p
现在可以用来指向类的成员函数Y
。
这个问题(实际上是两个问题)是:
- 可以
p
用来指向派生类中的函数Z
吗? - 可以
p
用来指向基类中的函数X
吗?
c++ - 如何键入一个指向方法的指针,该方法返回该方法的指针?
基本上我有以下课程:
stateA() 和 stateB() 方法应该能够返回指向 stateA() 和 stateB() 的指针。如何键入定义StateMethod?
c++ - 指向虚拟成员函数的指针。它是如何工作的?
考虑以下 C++ 代码:
如果我不得不猜测,我会说 &A::f 在这种情况下意味着“A 的 f() 实现的地址”,因为指向常规成员函数和虚拟成员函数的指针之间没有明确的分隔. 由于 A 没有实现 f(),这将是一个编译错误。然而,事实并非如此。
不仅如此。以下代码:
实际上会调用 B::f。
它是如何发生的?
c++ - 如何散列和比较指向成员函数的指针?
我如何散列(std::tr1::hash 或 boost::hash)一个 c++ 指向成员函数的指针?
例子:
我有几个 bool (Class::*functionPointer)() (不是静态的)指向类 Class 的几个不同方法,我需要散列那些指向成员函数的指针。
我怎样才能做到这一点?
另外,我如何比较(std::less)那些成员函数指针,以便将它们存储在 std::set 中?
c++ - 如何编写通用的“getData”函数?
我有一个类,比如“CDownloader”,它读取一些 XML 数据并提供节点名称的访问。它具有一些 getter 函数,如下所示:
我无法更改 CDownloader 类。相反,我想编写一些函数,通过使用 bool 标志而不是实际名称来下载项目。像这样的东西:
我可以单独编写 Download(Font|Integer|Image) 函数,但这会导致代码重复。我的想法是写一个模板,但我仍然茫然:如何确定我应该从 CDownloader 类中调用什么方法?为每种数据类型专门化模板意味着再次陷入代码重复。将 getter 函数作为“函数指针”参数传递?但是吸气剂签名在 CDownloader 中有所不同......
总结起来,问题是:是否可以围绕 CDownloader 编写通用包装器,或者我是否必须为每个“get***”函数复制代码?提前致谢!
c++ - C++ 成员函数指针和 STL 算法
我有一个抽象函子类,它重载了 operator() 和实现它的派生对象。
我有一个函数(另一个类的一部分),它试图获取这些仿函数类的数组,并尝试将指向成员函数的指针传递给 std 算法 for_each(),这是我正在做的事情的概述:
编辑:为了清楚起见,我重新清理了它并放置了旧的小例子。
我尝试了几种方法,但不知道如何让它工作,我需要使用抽象类型,因为我可以有不同的派生类型,但它们都必须实现相同的 operator()(param x ) 功能。
我只需要 for_each() 函数就可以调用成员函数 operator()(param x)。我有一个不同的函数,它有具体的实现,只需传递一个实例就可以了。我试图在这里达到类似的效果,但不知道我得到了什么具体的课程。
我究竟做错了什么?
c++ - 重新解释成员函数指针是一个“好主意”吗?
我有一个工作线程,它包含一个“线程操作”列表,并作为时间处理它们。
通常是这样称呼的
哪个工作得很好,直到
改为
遗憾的是,我们无法再次将其更改回来,因为其他内容需要新格式(并且重载不能仅因返回类型而异)。
我确实尝试过
这似乎工作得很好,但我不确定重新解释这样的函数指针是“定义”的行为,有人可以建议吗?
c++ - C++ 比较成员函数指针
在 C++ 中,是否可以为指向成员函数的指针定义排序顺序?似乎 operator< 未定义。此外,强制转换为 void* 是非法的。
谢谢!
c++ - 指向 C++ 中成员函数的函数指针
我需要调用一个需要函数指针的方法,但我真正想要传递给它的是函子。这是我正在尝试做的一个例子:
我一直无法找到编译最后一行printer(g, 4) 的方法。有没有办法让它工作?我唯一能控制的是方法“main”和类“adderClass”。
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: