问题标签 [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++ 排序向量
我有一堂课叫Sorter
. 它有两个公共项目。
int
类型变量choice
- 使用类型返回值调用的成员函数
compare
,该int
类型返回值接受两个对象作为参数。
Sorter
我尝试在将值传递choice
给构造函数时创建一个实例,
然后我想使用 C++sort
函数对vector
. 并传递compare
我创建的实例的成员函数。
成员函数使用compare
变量choice
来决定排序机制。
但我无法获得compare
指向Sorter
.
有人可以建议我吗?
c++ - 运行时功能的展示和使用
我想向外界展示一个类的功能(成员函数),而不在它的公共部分公开它的功能。因此用户将能够动态地知道/调用它的功能。以下是一些方法:
a) 提供指向成员函数的指针。在结构中提供的指针,带有一个随附的字符串以保存函数的名称。
b) 提供一个函数名称的字符串列表,以及一个采用字符串参数来调用指定成员函数的函数。
问题:哪种方法更有效?有没有更好的方法?我是在重新发明轮子吗(boost::function?)?
注意:
* IParameter 就是这样一个类,旨在保存通用/不言自明的数据,每个函数都知道如何解释它。
* 所有函数的签名都是一样的:
谢谢
c++ - 将 C++ 函数指针分配给同一对象的成员函数
如何让 test.calculate 中的函数指针分配(可能还有其余部分)起作用?
c++ - C++:使用成员函数指针获取函数虚拟“地址”
这个问题类似于 打印虚拟成员函数的地址
我想使用成员函数指针检索函数的内存位置(在运行时)。目标是记录它们,并进行事后分析,使用 WinDbg 中的“ln”来检索它是哪个函数,使用 PDB 符号。
我不能使用堆栈遍历,因为我还没有进入我想要记录的功能。(而且我不想修改数十亿个函数来返回他们的地址......)。
短样本:
任何人都知道如何检索地址?
给出 'error C2298: '&' : 对指向成员函数表达式的指针的非法操作'
我知道成员函数指针是“奇怪”的结构,但由于我知道“this”,有没有办法从 vtable 中查找潜在的虚函数?
问候,
参考:
c++ - C ++:指向虚拟成员函数的单态版本的指针?
在 C++ 中,可以获取指向类的(非静态)成员函数的指针,然后在对象上调用它。如果函数是虚拟的,调用将根据对象的动态类型动态调度。通过显式提供包含要使用的版本的范围,也可以(不使用成员指针)单态地调用对象的虚拟成员函数。下面的代码演示了这一点:
我想做的是将两者结合起来,并获得一个指向成员函数的单态版本的指针;即,我想要一个指向 Foo::foo 的指针,它总是调用 foo 的基类版本,并打印 1,即使它是在 Foo2 上调用的。但是,我还没有找到一种方法来做到这一点。可能吗?
(除了繁琐的手动编写一个新的非虚拟函数来进行单态调用,然后得到一个指向它的指针。)
c++ - 在成员函数返回类型上参数化的类模板部分特化
以下代码尝试根据成员函数指针类型的返回类型专门化类模板“special”,导致 VC9 出现编译错误:
错误 C2752:“特殊”:多个部分特化与模板参数列表匹配
GCC-4.3.4 接受相同的代码,如下所示:http://ideone.com/ekWGg
这是 VC9 中的错误,如果是,此错误是否持续存在于 VC10 中?
然而,我想出了一个非常侵入性的解决方法(至少对于这个特定的用例。欢迎更通用的解决方案):
c++ - C++:作为事件回调的类成员函数
我正在尝试向我的项目添加一个简单的消息传递系统,其中事件可以由函数调用,这将导致注册到该事件的所有回调都被调用。
现在,执行此操作的合乎逻辑的方法是使用函数指针。很容易将指向所需回调函数的指针传递给事件管理器,以进行注册。事件回调函数将始终返回 anint
并将 avoid*
作为参数。
但是我不想将静态全局函数注册为我的事件回调 - 我想用类成员函数来做。
甚至有可能用 C++ 实现这一点吗?存储和调用指向不同类但具有相同函数头的成员函数的指针。
如果这是不可能的,你对我如何解决这个问题有什么建议吗?我真的很想将事件侦听器直接添加到我的课程中。
c++ - 如何使用指向成员函数的指针调用函数
我有一堂课:
现在我想在 run() 中调用 test_func():
无论我尝试什么组合,我的代码的最后一行都不起作用(编译错误)。
c++ - 如何获取指向 COM 方法的指针以进行挂钩?
我知道这似乎是一个过度回答的问题,但这个问题是不同的。我有这个导出一些方法的 ActiveX 对象。我需要在它的一种方法上设置一个钩子,即Func1
,我知道如何通过使用VirtualProtect()
等来做到这一点。如果我打开 ollydbg 并深入研究 ActiveX DLL,我会看到Func1
我需要设置钩子的确切地址。
使用 Visual Studio 2008,我正在使用预编译器指令:
在我的代码中,我正在尝试这样做:
编译时返回错误:
错误 C2440:“正在初始化”:无法从“HRESULT (__stdcall IMyActx::*)(BSTR,BSTR)”转换为“LPVOID”。
this
我研究并发现由于隐式参数,我无法将指向类方法的指针转换为指向函数的指针。
但是,我不打算调用这个函数。我只想知道它在内存中的地址,以便我可以将它传递给我的挂钩例程(它需要一个LPVOID
指针)。
这对我来说似乎不可思议,我可以调用一个函数但不能在内存中获取它的原始地址。这让我想插入一些 x86 汇编代码只是为了得到我想要的指针。
任何建议都非常感谢,感谢阅读。
编辑...现在想起来...LPVOID ptr = &IMyActx::Func1;
不应该工作,因为IMyActx
它是一个纯虚拟类!无论如何,我在实例化一个对象并尝试获取原始指针之前尝试了一些组合,Func1
但到目前为止没有任何效果。我在 ollydbg 中看到调用Func1
生成为:
所以我可以假设我需要阅读DWORD
atvptr + 0x1C
字节和瞧。
如果我没记错的话,组件对象模型保证它将始终是放置在给定相同接口 ID的Func1
ptr 。[vptr + 0x1C]
永远。正确的?
我可能会用一些伪代码做这样的事情:
c++ - 成员函数指针 - 只有一个地址?
http://www.codeproject.com/KB/cpp/fastdelegate2.aspx
在上述文章介绍的第二段中,它说:“这是由于存储成员函数和进行成员函数调用的绑定对象所需的昂贵的堆内存分配。” ..我不明白吗?它实际上是否必须复制和存储对象和成员函数?不是只存储成员函数的地址吗?